Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Наглая оптимизация

13K
29 августа 2005 года
ShiFt
4 / / 29.08.2005
Выражение (*ptr + *(++ptr)) при включенной
оптимизации приводится к виду (*ptr * 2), то есть компилятор решает, что это обращение к одной и той же ячейке. Как победить не используя индексы и не выключая оптимизацию?
#pragma optimize не подходит из за не локального действия.
13K
29 августа 2005 года
ThiefX
6 / / 19.08.2005
А почему просто (*ptr + *(ptr+1)) не написать???
3
29 августа 2005 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by ShiFt
Выражение (*ptr + *(++ptr)) при включенной
оптимизации приводится к виду (*ptr * 2), то есть компилятор решает, что это обращение к одной и той же ячейке. Как победить не используя индексы и не выключая оптимизацию?
#pragma optimize не подходит из за не локального действия.


Ну вообще-то, оптимизатор тут не при чем.
Компилятор сначала вычистяет то, что в скобках (++ptr), а потом уж выполняет оба разыменования. Т.о. порядок действий таков:
1) ptr = ptr+1
2) *ptr + *ptr

13K
29 августа 2005 года
ShiFt
4 / / 29.08.2005
Цитата:
Originally posted by ThiefX
А почему просто (*ptr + *(ptr+1)) не написать???



Интересно просто.

13K
29 августа 2005 года
ShiFt
4 / / 29.08.2005
Цитата:
Originally posted by Green
Ну вообще-то, оптимизатор тут не при чем.
Компилятор сначала вычистяет то, что в скобках (++ptr), а потом уж выполняет оба разыменования. Т.о. порядок действий таков:
1) ptr = ptr+1
2) *ptr + *ptr



Оптимизатор еще как при чем, без него все раскладывается как (ptr[0]+ptr[1]), асм не привожу..
Это вообще то не проблема и, наверное, лучше отказаться от таких неоднозначных конструкций.

3
29 августа 2005 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by ShiFt
Оптимизатор еще как при чем, без него все раскладывается как (ptr[0]+ptr[1]), асм не привожу..


Оптимизатор не при чем, т.к. порядок вычисления аргументов стандартом не определен, а сл-но все зависит от реализации компилятора.

Цитата:
Originally posted by ShiFt
Это вообще то не проблема и, наверное, лучше отказаться от таких неоднозначных конструкций.


Да, конечно.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог