Interested Article - Удаление недостижимого кода
- 2020-03-22
- 1
В теории компиляторов удалением недостижимого кода ( англ. unreachable code elimination ) называется оптимизация , удаляющая недостижимый код , то есть код, который содержится в программе, но по каким-то причинам никогда не исполняется . В графе потока управления программы этот код содержится в узлах, недостижимых из начального узла . Само преобразование напрямую не влияет на скорость исполнения программы, ведь удаляемые инструкции всё равно никогда не исполняются и не занимают процессорного времени ; но оно оказывает косвенный положительный эффект, снижая давление на кэш инструкций и расширяя возможности последующих оптимизаций, работающих с графом потока управления .
Примеры
Рассмотрим следующий пример на языке Си :
int foo(int a)
{
int b;
b = a << 2;
return b;
b = 47; /* Недостижимый код */
return 0; /* Недостижимый код */
}
В данном примере операция присваивания
b = 47
и последующий выход из процедуры являются недостижимым кодом, так как оно происходит после безусловного возврата из процедуры. После того как оптимизация удалит указанные операции получим:
int foo(int a)
{
int b;
b = a << 2;
return b;
}
Распространённой практикой в
отладке программ
является временное отключение части кода
. Обычно это делается с помощью
комментирования
этого участка кода (что часто бывает затруднительно, из-за наличия в программе других комментариев) или директив
препроцессора
(в
C
/
C++
это директивы
#if 0
...
#endif
). Использование удаления недостижимого кода может служить альтернативой выключения кода с помощью препроцессора.
Рассмотрим следующий пример на языке
Java
:
public static int Sample() {
int a = 5;
int b = 6;
int c;
c = a + b;
if(false) { /* DEBUG */
System.out.format("%d", c);
}
return c;
}
Код внутри оператора
if
не может выполнится, так как является недостижимым, и будет полностью удалён оптимизацией.
Алгоритмы
Применение
См. также
Примечания
- ↑ Advanced compiler design and implementation — С. 580.
- Engineering a Compiler — С. 544.
- Дата обращения: 5 июля 2012. 31 января 2022 года.
Литература
- Cooper and Torczon. Engineering a Compiler. — Morgan Kaufmann, 2011. — С. 550, 593. — ISBN 978-0-12-088478-0 .
- Ахо, Альфред В.; Сети, Рави; Ульман, Джеффри Д. . — Вильямс, 2003. — С. —613, 669. — ISBN 5-8459-0189-8 .
- Muchnick, Steven S. . — Morgan Kaufmann Publishers , 1997. — С. —582. — ISBN 1-55860-320-4 .
- 2020-03-22
- 1