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

       

Замена циклов с предусловием на циклы с постусловием


Существуют три основных типа цикла: циклы с условием вначале

(см. рис. 2 слева), циклы с условием в конце

(см. рис. 2 в центре) и циклы с условием в середине (см. рис. 2 справа). Комбинированные циклы имеют несколько условий в разных местах, например, в начале и в конце одновременно. Как видно, цикл с постусловием содержит всего одно ветвление, в то время как все его "собратья" – два!

Рисунок 2 0х002 Логическое дерево цикла с условием вначале (слева) и условием в конец (справа).

Компилятор Microsoft Visual C++ всегда заменяет циклы с предусловием на циклы с постусловием, а его конкуренты – Borland C++ и WATCOM – нет. Понятное дело – такая замена не может быть осуществлена без коррекции тела цикла, что представляет собой отнюдь не тривиальную задачу. Но, к сожалению, в рамки журнальной статьи слишком тесны для описания этой технологии и мне ничего не остается, как отослать заинтересованных читателей к книге "Техника дизассемблирования программ" Крис Касперски – там вопрос трансляции циклов изложен во всех подробностях.



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