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