Удаление недостижимого кода

Удаление недостижимого кода

В теории компиляторов удалением недостижимого кода (англ. 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 не может выполнится, так как является недостижимым, и будет полностью удалён оптимизацией.

Алгоритмы

Применение

См. также

Примечания

  1. 1 2 Advanced compiler design and implementation — С. 580.
  2. Engineering a Compiler — С. 544.
  3. MSDN шаг за шагом. Шаг 3 - С++ комментарии.. Архивировано из первоисточника 28 сентября 2012. Проверено 5 июля 2012.

Литература

  • Cooper and Torczon Engineering a Compiler. — Morgan Kaufmann, 2011. — С. 550, 593. — ISBN 978-0-12-088478-0
  • Ахо, Альфред В.; Сети, Рави; Ульман, Джеффри Д. Компиляторы — принципы, технологии, инструменты. — Вильямс, 2003. — С. 568-613, 669. — ISBN 5-8459-0189-8
  • Muchnick, Steven S. Advanced Compiler Design and Implementation. — Morgan Kaufmann Publishers, 1997. — С. 580-582. — ISBN 1-55860-320-4

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать курсовую

Полезное


Смотреть что такое "Удаление недостижимого кода" в других словарях:

  • Удаление мёртвого кода — В теории компиляторов удалением мёртвого кода (англ. dead code elimination, DCE) называется оптимизация, удаляющая мёртвый код. Мёртвым кодом (так же бесполезным кодом) называют код, исполнение которого не влияет на вывод программы, все… …   Википедия

  • Мёртвый код — В теории компиляторов, мёртвым кодом (так же бесполезным кодом, англ. dead code) называют код, который может быть исполнен, но результаты его вычислений в дальнейшем в программе не используются[1][2][3]. Другими словами это код, определяющий …   Википедия

  • Недостижимый код — В программировании и теории компиляторов, недостижимым кодом называют часть кода программы, которая ни при каких условиях не может быть исполнена, поскольку является недостижимой в графе потока управления[1][2]. Недостижимый код часто относят к… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»