ТЕХНИКА ОПТИМИЗАЦИИ ПРОГРАММ

       

Замена инкремента цикла на декремент


Поскольку, машинные инструкции декремента (уменьшения значения переменной) автоматически выбрасывают Zero-флаг при достижении нуля, сравнивать уменьшаемую переменную с нулем не требуется – это автоматически делает сам процессор. Отсюда: цикл for (a=10;a>0;a--)

транслируется в более компактный и быстродействующий код, нежели цикл for (a=0;a<10;a++).

Если аргумент цикла не используется в самом цикле, то компилятор Microsoft Visual C++ всегда транслирует его в цикл с декрементом. Например, пусть исходный код программы выглядел так:

for(a=0;a<10;a++)

printf("Hello, Sailor!\n");

Поскольку, переменная 'a' не используется в теле цикла, заголовок цикла можно безболезненно переписать так:

for(a=10;a>0;a--)

Из всех трех рассматриваемых компиляторов на такой трюк способен один лишь Microsoft Visual C++, – ни Borland C++, ни WATCOM этого делать не умеют.



Содержание раздела