Распространение констант и копий

С точки зрения оптимизации кода доступ к значениям в регистрах быстрее, чем доступ к константам, который в свою очередь эффективнее доступа к значениям, хранящимся в памяти. При прочих равных условиях, если секция кода исчерпывает доступную регистровую память, рассмотрите возможность замены некоторого выражения константой. Такой подход позволяет компилятору прибегнуть к распространению (propagation) константы путем ее повторного использования во всей секции кода. Компилятор способен оптимизировать операторы посредством замены всех выражений, оцениваемых константным значением, на само это значение, как в следующем фрагменте:
iValueOne = 10;
iResult = iValueOne;

При распространении константы компилятор кодирует операторы так, как если бы они выглядели следующим образом:
iValueOne = 10;
iResult = 10;

Подобным же образом распространение копии производится, когда компилятор распознает ряд присваиваний одного и того же значения от одной переменной к другой без каких-либо промежуточных вычислений, могущих изменить это значение. Рассмотрите такие операторы:
iValue - iSomeValue;
iValue = myFunctionCall (iValue);

Здесь присваивание iValue значения iSomeValue не служит никакой разумной цели. Оптимизирующий компилятор распознает такую последовательность и генерирует вместо нее следующий логический эквивалент:
iValue = myFunctionCall (iSomeValue);
Компилятор, как видите, делает безобидную подстановку iSomeValue вместо iValue. В результате первый оператор становится избыточным; он порождает то, что называется мертвыми данными.

Купить мебель в интернет магазин стенки по низким ценам.


Интересные записи

Написать комментарий