У теорії компіляторів ви́даленням недося́жного ко́ду () називають оптимізацію, що видаляє недосяжний код, тобто код, який міститься в програмі, але з певних причин ніколи не виконуєтьсяAdvanced compiler design and implementation — С. 580.. В графі потоку управління програми цей код міститься у вузлах, недосяжних з початкового вузлаEngineering a Compiler — С. 544.. Саме́ перетворення безпосередньо не впливає на швидкість виконання програми, адже видаляються інструкції, які все одно ніколи не виконуються і не займають процесорного часу; але воно надає непрямий позитивний ефект, знижуючи тиск на кеш інструкцій і розширюючи можливості подальших оптимізацій, що працюють із графом потоку керування.
Приклади Розглянемо такий приклад мовою Сі: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 неможливо виконати, оскільки він недосяжний, і буде повністю видалений під час оптимізації.
Алгоритми
Застосування
Див. також
Недосяжний код Мертвий код Видалення мертвого коду Оптимізувальний компілятор
Примітки
Література