|
|
  |
IAR 3.10C, Цена доверия |
|
|
|
Dec 9 2005, 08:32
|
Знающий
   
Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693

|
Ну прально Цитата ktmp|= ((PultFlag&(0x01<<pult)))?(1<<pult):0; ktmp=0; результата использования ktmp нет, зачем её вычислять ваще? Оптимизаццыя то по скорости! ;О) В других оптимизаццыях компилер предполагает, что это, мобуть, какая-то задержка калиброванная ;О) и не торгает. А при макс скорости он её таво...
|
|
|
|
|
Dec 9 2005, 08:55
|

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)  Я так полагаю, что не стоит полагаться на оптимизацию компилятора, надо самому грамотно писать программу. Истину глаголите.  volatile.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Dec 9 2005, 11:47
|
Местный
  
Группа: Свой
Сообщений: 404
Регистрация: 3-12-04
Из: Новосибирск
Пользователь №: 1 304

|
[quote name='IgorKossak' post='70214' date='Dec 9 2005, 17:27'] Код сам по себе ошибочный. Компилятор старый. Зато какое пафосное название темы! [/quote] Оговорюсь: фрагмент кода, который в программе в данной последовательности не используется. Здесь приведен фрагмент, который я написал, чтобы поглядеть в отладчике что же происходит. Слова благодарности dxp, который на двух пальцах объяснил, как все это воспринимает компилятор(что собственно и хотелось услышать). Версия компилятора - абсолютно не при чем, если она не содержит в себе ошибок. И менее всего я уделял названию темы...
[quote name='KRS' date='Dec 9 2005, 17:09' post='70203'] [/quote] Хороший компилер, многие сложные врыажения там где умножение есть лучше компилит. Но вот часть оптимизации похуже стала например если константа или указатель (константный) много раз испольуется 3.20D его в регистрах хранил а 4.11 какждый раз загружает.
Я вот решил пока на 3.20D остаться. [/quote] Где добыть можно 3.20D?
|
|
|
|
|
Dec 9 2005, 12:39
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
Цитата(KSN @ Dec 9 2005, 13:47)  Где добыть можно 3.20D? Зайти по ссылке, далее - Product updates, далее - Version 3.20 и далее выбрать C или CPP обновлять. Лечится уникраком. Но перед этим надо снести и поставить заново непролеченную версию 3.20C.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|