Interested Article - Свёртка констант
- 2020-08-09
- 1
Свёртка констант ( англ. constant folding ) и распространение констант (так же продвижение констант , дублирование констант , англ. constant propagation ) — часто используемые в современных компиляторах оптимизации , уменьшающие избыточные вычисления, путём замены константных выражений и переменных на их значения . Так же часто применяется расширенный алгоритм , выполняющий одновременно распространение констант и удаление некоторого мёртвого кода .
Свёртка констант
Свёртка констант — оптимизация, вычисляющая константные выражения на этапе компиляции. Прежде всего, упрощаются константные выражения, содержащие числовые литералы . Также могут быть упрощены выражения, содержащие никогда не изменяемые переменные или переменные, объявленные как константы . Рассмотрим пример:
i = 320 * 200 * 32;
Компилятор, поддерживающий свёртку констант, не будет генерировать две инструкции умножения и запись полученного результата. Вместо этого он распознает эту конструкцию как константное выражение и заменит её на вычисленное значение (в данном случае 2 048 000).
Распространение констант
Распространение констант — оптимизация , заменяющее выражение, которое при выполнении всегда возвращает одну и ту же константу, самой этой константой . Это может быть константа, определённая ранее, или , применённая к константам. Рассмотрим следующий пример:
int x = 14;
int y = 7 - x / 2;
return y * (28 / x + 2);
Распространение
x
возвращает:
int x = 14;
int y = 7 - 14 / 2;
return y * (28 / 14 + 2);
Далее, свёртка констант и распространение
y
возвращают следующее (присваивания
x
и
y
, вероятно, в дальнейшем будут удалены оптимизацией
удаления мёртвого кода
):
int x = 14;
int y = 0;
return 0;
См. также
Примечания
- Практикум «Оптимизирующие компиляторы» (на примере GCC). — НГУ им. Лобачевского. — С. 100.
- , p. 362-370.
- , p. 760.
Литература
- Steven S. Muchnick. Advanced Compiler Design and Implementation. — 5-е издание. — San Francisco: Morgan Kaufmann Publishers , 1997. — 856 с. — ISBN 1-55860-320-4 .
- Альфред Ахо, Моника Лам, Рави Сети, Джеффри Ульман. Компиляторы: принципы, технологии и инструментарий = Compilers: Principles, Techniques, and Tools. — 2-е издание. — М. : «Вильямс», 2008. — 1184 с. — 1500 экз. — ISBN 978-5-8459-1349-4 .
Ссылки
- 2020-08-09
- 1