Форум: "Начинающим";
Текущий архив: 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