реклама на сайте
подробности

 
 
> IAR 3.10C, Цена доверия
KSN
сообщение Dec 9 2005, 08:23
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 404
Регистрация: 3-12-04
Из: Новосибирск
Пользователь №: 1 304



Вот небольшой фрагмент кода:
ktmp=0;
PultFlag=4;
for(pult=0;pult<3;pult++)
ktmp|= ((PultFlag&(0x01<<pult)))?(1<<pult):0;
ktmp=0;
PultFlag=5;
for(pult=0;pult<3;pult++)
ktmp|= ((PultFlag>>pult)&0x01)?(1<<pult):0;
Если уровень оптимизации по скорости минимален или вооще нет, то все хорошо, но как только делаю уровень оптимизации High, то в первом цикле перестает вычисляться ktmp. Поэтому вопрос: в какой степени компилятор наплевательски относится к написанному коду при оптимизациях? Как с этим обстоят дела в более поздних версиях компилятора. Я так полагаю, что не стоит полагаться на оптимизацию компилятора, надо самому грамотно писать программу.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
dxp
сообщение Dec 9 2005, 08:55
Сообщение #2


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(KSN @ Dec 9 2005, 14:23) *
Вот небольшой фрагмент кода:
ktmp=0;
PultFlag=4;
for(pult=0;pult<3;pult++)
ktmp|= ((PultFlag&(0x01<<pult)))?(1<<pult):0;
ktmp=0;
PultFlag=5;
for(pult=0;pult<3;pult++)
ktmp|= ((PultFlag>>pult)&0x01)?(1<<pult):0;

Дык. После первого цикла значение ktmp не используется. Более того, сразу после этого ему конкретно присваивается 0. С точки зрения компилятора и здравого смысла работа, произведенная в первом цикле сделана впустую. И оптимизатор совершенно справедливо удаляет этот ненужный код, уменьшая размер программы и увеличивая скорость ее работы. В этом весь смысл оптимизации и состоит. Если Вам надо проследить за значениями и подавить оптимизацию, то объявите ktmp как volatile. Так часто делают при отладке, когда надо отследить промежуточные значения. В этом случае компилятор не будет ничего оптимизировать в части этой переменной.

Цитата(KSN @ Dec 9 2005, 14:23) *
Я так полагаю, что не стоит полагаться на оптимизацию компилятора, надо самому грамотно писать программу.

Истину глаголите. smile.gif volatile. smile.gif


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post



Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 09:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.0139 секунд с 7
ELECTRONIX ©2004-2016