Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];

Вниз

Переменная цикла с неверным начальнымзначением   Найти похожие ветки 

 
kyn66 ©   (2009-11-09 15:39) [0]

Столкнулся с ситуацией, прогоняяя пошагово в отладчике программу.

  ...
  st := TStringList.Create;
  tir_st := TStringList.Create;
  ListBox1.Clear;
  for i := 1 to KolLotery do
   begin
     tir_st.Clear;
     if TirNumb_A[i].LastNum < TirLast_A[i] then


При превом вхожденнии в цикл переменная i должна бы иметь значение 1, однако она равна 4 (http://yurec66.narod.ru/Vopros/cikl.jpg). Значение KolLotery = 4. Проходя цикл пошагово, переменная i принимает значения 4,3,2,1. Хотя в итоге все отрабатывает правильно. Да и реальные значения массивов TirNumb_A[i].LastNum < TirLast_A[i] при определенном значении i показывает неверно в Watches List/ Почему такое может быть. Что на это влияет?


 
Медвежонок Пятачок ©   (2009-11-09 15:42) [1]

переменная i должна бы иметь значение 1

Не должна ни разу.


 
Сергей М. ©   (2009-11-09 15:43) [2]


> Что на это влияет?


Это рез-т работа оптимизирующего алгоритма компилятора.
Оптимизатор можно отключить в опциях компилятора в св-вах проекта.


> в итоге все отрабатывает правильно


Тогда о чем забота, если в итогое все в порядке ?


 
kyn66 ©   (2009-11-09 15:51) [3]


> Это рез-т работа оптимизирующего алгоритма компилятора.


Я предполагал, что что то с настройками компилятора, но не думал что в этом месте. Сергей, ты как всегда прав! Отключил - все показывает правильно. Значит для отладки оптимизацию ваще отключать нужно, только в момент окончательной сборки включить.


> Тогда о чем забота, если в итогое все в порядке ?


Да "блоху" одну выловить не могу. Не принимает нужного значения, а тут еще и цикл в обратном порядке работает :)


 
kyn66 ©   (2009-11-09 15:55) [4]


> Медвежонок Пятачок ©   (09.11.09 15:42) [1]
> переменная i должна бы иметь значение 1Не должна ни разу.
>


В данной интерпритации for i := 1 to KolLotery do - обязана!


 
Медвежонок Пятачок ©   (2009-11-09 15:56) [5]

В данной интерпритации for i := 1 to KolLotery do - обязана!

Хрен то правда.


 
Сергей М. ©   (2009-11-09 15:57) [6]


> тут еще и цикл в обратном порядке работает


Оптимизирующий компилятор - он не такой идиот как тебе кажется.
Если он видит, что для достижения конечного результата порядок обхода элементов не важен , он будет управлять переменной цикла так как он сочтет оптимальней с т.з. производительности и ресурсов памяти.


 
Amoeba ©   (2009-11-09 16:03) [7]


> а тут еще и цикл в обратном порядке работает

потому, что так быстрее, и в данном случае результат от порядка не зависит.


> Не принимает нужного значения

Принимает сперва последнее значение и далее декрементируется.


> Значит для отладки оптимизацию ваще отключать нужно, только
> в момент окончательной сборки включить.

Совсем не обязательно. Но бывает полезно, если нужно отследить при трассировки значения тех переменных, которые оптимизатор выкидывает и использует вместо них регистры.


 
Дмитрий Белькевич   (2009-11-09 16:05) [8]


> В данной интерпритации for i := 1 to KolLotery do - обязана!


Оптимизатор делает за тебя работу. Радуйся.


 
kyn66 ©   (2009-11-09 16:12) [9]


> Оптимизатор делает за тебя работу. Радуйся.


Но мне то он об этом не сказал.... Хорошо Мастера(прошу заметить, сознательно пишу с большой буквы) подсказали... :) Век живи, век учись. Если кто хочет добавить (с ехидством... не нужно...) :)


> Совсем не обязательно. Но бывает полезно, если нужно отследить
> при трассировки значения тех переменных, которые оптимизатор
> выкидывает и использует вместо них регистры.


Вот это и пытался сделать. А на одной переменной Raz :=  TirLast_A[i] - TirNumb_A[i].LastNum; ваще не давал поставить току останова (синяя точечка отсутствовала), пока я ее конкретно не задействовал.


 
Сергей М. ©   (2009-11-09 16:16) [10]


> пока я ее конкретно не задействовал


Оптимизатор попросту выкинул эту строчку из "рассмотрения" как совершенно бестолковую.


 
kyn66 ©   (2009-11-09 16:22) [11]


> Оптимизатор попросту выкинул эту строчку из "рассмотрения"
> как совершенно бестолковую.


Для него может и да, но для меня она была значащая, т.к. как говорил не мог отловить "блоху", промежуточное значение где-то терялось. Насколько помню включение оптимизации компилятора выходной размер кода немного уменьшает. Есть еще какое полезное воздействие от его включения?


 
Сергей М. ©   (2009-11-09 16:23) [12]


> Есть еще какое полезное воздействие от его включения?


Увеличение сквозной производительности алгоритма.


 
Anatoly Podgoretsky ©   (2009-11-09 16:24) [13]

> kyn66  (09.11.2009 15:51:03)  [3]

Не нужно


 
kyn66 ©   (2009-11-09 16:42) [14]


> Anatoly Podgoretsky ©   (09.11.09 16:24) [13]
> > kyn66  (09.11.2009 15:51:03)  [3]Не нужно


Как всегда лаконично. А обоснование какое есть? Вопрос был задан потому, что компилятор "дизорентировал" при отладке.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.006 c
15-1256511599
Германн
2009-10-26 01:59
2009.12.27
Что за зверь search.qip.ru


1-1230387592
dm37
2008-12-27 17:19
2009.12.27
Вывод текста (во время блокировки компьютера)


6-1211196570
KuH
2008-05-19 15:29
2009.12.27
Авторизация через TServerSocket


15-1256898600
RWolf
2009-10-30 13:30
2009.12.27
Firebird: как поднять БД из SHADOW?


3-1232343690
pavel_guzhanov
2009-01-19 08:41
2009.12.27
Можно ли проиндексировать поле в представлении?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский