В теории компиляторов удалением недостижимого кода (англ. unreachable code elimination) называется оптимизация, удаляющая недостижимый код, то есть код, который содержится в программе, но по каким-то причинам никогда не исполняется[1]. В графе потока управления программы этот код содержится в узлах, недостижимых из начального узла[2]. Само преобразование напрямую не влияет на скорость исполнения программы, ведь удаляемые инструкции всё равно никогда не исполняются и не занимают процессорного времени; но оно оказывает косвенный положительный эффект, снижая давление на кэш инструкций и расширяя возможности последующих оптимизаций, работающих с графом потока управления[1].
Рассмотрим следующий пример на языке Си:
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;
}
Распространённой практикой в отладке программ является временное отключение части кода[3]. Обычно это делается с помощью комментирования этого участка кода (что часто бывает затруднительно, из-за наличия в программе других комментариев) или директив препроцессора (в 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
не может выполнится, так как является недостижимым, и будет полностью удалён оптимизацией.
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .