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

       

Оптимизация подвыражений


Если выражение содержит два или более идентичных подвыражения, то вполне достаточно вычислять значение лишь одного из них.

Рассмотрим следующий пример:

if ((a*b)>0x666 && (a*b)<0xDDD) …

Присвоив результат вычисления (a*b) промежуточной переменной, мы сможем избавиться от одной операции умножения, смотрите:

tmp=a*b;

if (tmp>0x666 && tmp<0xDDD) …

Оптимизировать выражения умеют все три рассматриваемых компилятора, но не каждый из них способен распознавать идентичность выражений при их перегруппировке. Вот, например:

if ((a*b)>0x666 && (b*a)<0xDDD) …

Очевидно, что от перестановки множителей произведение не меняется и (a*b) равно (b*a). Компиляторы Microsoft Visual C++ и WATCOM вычислят значение (a*b) лишь однажды, а Borland C++ примет (a*b) и (b*a) за разные

выражения со всеми вытекающими отсюда последствиями.



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