Наглая оптимизация
оптимизации приводится к виду (*ptr * 2), то есть компилятор решает, что это обращение к одной и той же ячейке. Как победить не используя индексы и не выключая оптимизацию?
#pragma optimize не подходит из за не локального действия.
А почему просто (*ptr + *(ptr+1)) не написать???
Цитата:
Originally posted by ShiFt
Выражение (*ptr + *(++ptr)) при включенной
оптимизации приводится к виду (*ptr * 2), то есть компилятор решает, что это обращение к одной и той же ячейке. Как победить не используя индексы и не выключая оптимизацию?
#pragma optimize не подходит из за не локального действия.
Выражение (*ptr + *(++ptr)) при включенной
оптимизации приводится к виду (*ptr * 2), то есть компилятор решает, что это обращение к одной и той же ячейке. Как победить не используя индексы и не выключая оптимизацию?
#pragma optimize не подходит из за не локального действия.
Ну вообще-то, оптимизатор тут не при чем.
Компилятор сначала вычистяет то, что в скобках (++ptr), а потом уж выполняет оба разыменования. Т.о. порядок действий таков:
1) ptr = ptr+1
2) *ptr + *ptr
Цитата:
Originally posted by ThiefX
А почему просто (*ptr + *(ptr+1)) не написать???
А почему просто (*ptr + *(ptr+1)) не написать???
Интересно просто.
Цитата:
Originally posted by Green
Ну вообще-то, оптимизатор тут не при чем.
Компилятор сначала вычистяет то, что в скобках (++ptr), а потом уж выполняет оба разыменования. Т.о. порядок действий таков:
1) ptr = ptr+1
2) *ptr + *ptr
Ну вообще-то, оптимизатор тут не при чем.
Компилятор сначала вычистяет то, что в скобках (++ptr), а потом уж выполняет оба разыменования. Т.о. порядок действий таков:
1) ptr = ptr+1
2) *ptr + *ptr
Оптимизатор еще как при чем, без него все раскладывается как (ptr[0]+ptr[1]), асм не привожу..
Это вообще то не проблема и, наверное, лучше отказаться от таких неоднозначных конструкций.
Цитата:
Originally posted by ShiFt
Оптимизатор еще как при чем, без него все раскладывается как (ptr[0]+ptr[1]), асм не привожу..
Оптимизатор еще как при чем, без него все раскладывается как (ptr[0]+ptr[1]), асм не привожу..
Оптимизатор не при чем, т.к. порядок вычисления аргументов стандартом не определен, а сл-но все зависит от реализации компилятора.
Цитата:
Originally posted by ShiFt
Это вообще то не проблема и, наверное, лучше отказаться от таких неоднозначных конструкций.
Это вообще то не проблема и, наверное, лучше отказаться от таких неоднозначных конструкций.
Да, конечно.