Форум: "Основная";
Текущий архив: 2002.12.05;
Скачать: [xml.tar.bz2];
ВнизПроблема с циклами for Найти похожие ветки
← →
vladnt (2002-11-22 11:01) [0]Добрый день. Проблемка такая:
procedure
...
for i:=0 to 2 do
begin
....
end;
for i:=0 to 2 do
begin
.....
end;
Во втором цикле i принимает значение 3 и убывает до 1.
Первый раз со мной такое,но если сделать так :
procedure
...
for i:=0 to 2 do
begin
....
end;
k:=0;
for i:=k to 2 do
begin
.....
end;
все работает. Неужели так бывает?
← →
KoluChi (2002-11-22 11:05) [1]не бывает
← →
Anatoly Podgoretsky (2002-11-22 11:09) [2]Все правильно работает, или у тебя неверный результат, тогда код в студию
← →
F1 (2002-11-22 11:11) [3]Шаман, однако!!!
Давай полный текст заклинания!!!
← →
Calm (2002-11-22 11:16) [4]Я слышал, что есть какой-то очень хитрый ход с оптимизацией. Компилятор считает, что выполнять цикл всегда удобнее от большего к меньшему. При этом прога работает правильно, но отладчик может показать значения счетчика в обратном порядке.
← →
Song (2002-11-22 11:19) [5]Отключи оптимизацию.
← →
vladnt (2002-11-22 12:06) [6]Оптимизацию отключил.Работает.Большое спасибо.
Как быть в других проектах? Всегда ее отключать?
← →
Calm (2002-11-22 12:11) [7]2 vladnt (22.11.02 12:06)
А если скопмилиться при включенной оптимизации, а затем запустить EXE. Прога будет работать неправильно?
Дело в том, что насколько я понял, глюки со счетчиком цикла (хотя на самом деле они не глюки) должны иметь место только в режиме отладки при просмотре значения счетчика.
← →
Свифт (2002-11-22 12:12) [8]2 vladnt
это только в отладчике
отладил - верни оптимизацию
← →
Opuhshii (2002-11-22 12:29) [9]2Calm © (22.11.02 12:11)
да с чего вы взяли что это глюки???,... это оптимизация,. буквально на несколько инструкций, но все же,.. вы навероное не используете счетчик цикла в теле цикла, либо как-то очень не тривиально его используете,.. имхо,...
← →
Calm (2002-11-22 12:35) [10]2 Opuhshii © (22.11.02 12:29)
Да я не считаю это глюками. Я же так и написал.
Это явление может показаться глюком тем, кто не был знаком с данным вопросом.
← →
DarkGreen (2002-11-22 12:47) [11]2 Calm ©
Быстрее выполняются не от большого к меньшему, а циклы с постусловием, т.е. repeat until работает быстрее чем while. Многие оптимизирующие компиляторы сами производят замену циклов с предусловием на циклы с постусловием.
2 vladnt
А зачем вообще использовать такие маленькие циклы? Вполне возможно, что при включеной оптимизации компилятор их развернет. (C++ так точно поступит, а вот на счет делфей не знаю)
2 Opuhshii ©
Скорее на одну: mov I, 0 :-)
← →
vladnt (2002-11-22 13:07) [12]DarkGreen
Циклы не маленькие,то что описано выше это для примера.
Всем
Самое страшное , что это уже похоже на глюки.Сейчас работает правильно и при включенной оптимизации.Не знаю, что будет к вечеру.
← →
SottNick (2002-11-22 13:11) [13]не глюки это
не глюки...
← →
Andre V. (2002-11-22 13:12) [14]Бывало!!!!
Заменил на while do; и забыл о проблеме
← →
IKiller (2002-11-25 11:42) [15]Это работа оптимизатора. Если ты в цикле не используешь явно значение счетчика, то компилятор заменяет цикл на убывающий, т.к. он отрабатывает немного быстрее.
← →
han_malign (2002-11-25 11:58) [16]
push ECX
mov CX, Count
@1:
..........
loop @1
pop ECX
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.12.05;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.015 c