Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с циклами for [D5, Win2k]


vladnt ©   (2002-11-22 11:01:00) 

Добрый день. Проблемка такая:
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;

все работает. Неужели так бывает?


han_malign   (2002-11-25 11:58:00) [1]

push ECX
mov CX, Count
@1:
..........
loop @1
pop ECX


IKiller   (2002-11-25 11:42:00) [2]

Это работа оптимизатора. Если ты в цикле не используешь явно значение счетчика, то компилятор заменяет цикл на убывающий, т.к. он отрабатывает немного быстрее.


Andre V.   (2002-11-22 13:12:00) [3]

Бывало!!!!
Заменил на while do; и забыл о проблеме


SottNick   (2002-11-22 13:11:00) [4]

не глюки это
не глюки...


vladnt   (2002-11-22 13:07:00) [5]

DarkGreen
Циклы не маленькие,то что описано выше это для примера.
Всем
Самое страшное , что это уже похоже на глюки.Сейчас работает правильно и при включенной оптимизации.Не знаю, что будет к вечеру.


DarkGreen   (2002-11-22 12:47:00) [6]

2 Calm ©
Быстрее выполняются не от большого к меньшему, а циклы с постусловием, т.е. repeat until работает быстрее чем while. Многие оптимизирующие компиляторы сами производят замену циклов с предусловием на циклы с постусловием.
2 vladnt
А зачем вообще использовать такие маленькие циклы? Вполне возможно, что при включеной оптимизации компилятор их развернет. (C++ так точно поступит, а вот на счет делфей не знаю)
2 Opuhshii ©
Скорее на одну: mov I, 0 :-)


Calm   (2002-11-22 12:35:00) [7]

2 Opuhshii © (22.11.02 12:29)
Да я не считаюэто глюками. Я же так и написал.
Это явление можетпоказаться глюком тем, кто не был знаком с данным вопросом.


Opuhshii   (2002-11-22 12:29:00) [8]

2Calm © (22.11.02 12:11)
да с чего вы взяли что это глюки???,... это оптимизация,. буквально на несколько инструкций, но все же,.. вы навероное не используете счетчик цикла в теле цикла, либо как-то очень не тривиально его используете,.. имхо,...


Свифт   (2002-11-22 12:12:00) [9]

2 vladnt
это только в отладчике
отладил - верни оптимизацию


Calm   (2002-11-22 12:11:00) [10]

2 vladnt (22.11.02 12:06)
А если скопмилиться при включенной оптимизации, а затем запустить EXE. Прога будет работать неправильно?

Дело в том, что насколько я понял, глюки со счетчиком цикла (хотя на самом деле они не глюки) должны иметь место только в режиме отладки при просмотре значения счетчика.


vladnt   (2002-11-22 12:06:00) [11]

Оптимизацию отключил.Работает.Большое спасибо.
Как быть в других проектах? Всегда ее отключать?


Song   (2002-11-22 11:19:00) [12]

Отключи оптимизацию.


Calm   (2002-11-22 11:16:00) [13]

Я слышал, что есть какой-то очень хитрый ход с оптимизацией. Компилятор считает, что выполнять цикл всегда удобнее от большего к меньшему. При этом прога работает правильно, но отладчик может показать значения счетчика в обратном порядке.


F1   (2002-11-22 11:11:00) [14]

Шаман, однако!!!
Давай полный текст заклинания!!!


Anatoly Podgoretsky   (2002-11-22 11:09:00) [15]

Все правильно работает, или у тебя неверный результат, тогда код в студию


KoluChi   (2002-11-22 11:05:00) [16]

не бывает


Наверх

Титульная страница Поиск, карта сайта Написать письмо