У теорії компіляторів ви́даленням недося́жного ко́ду (англ. 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/ це директиви #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.
- . Архів оригіналу за 31 січня 2022. Процитовано 5 липня 2012.
Література
- [en] and Torczon. Engineering a Compiler. — Morgan Kaufmann, 2011. — С. 550, 593. — .
- Ахо, Альфред В.; Сети, Рави; Ульман, Джеффри Д. Компиляторы — принципы, технологии, инструменты. — Вильямс, 2003. — С. 568—613, 669. — .
- [en]. Advanced Compiler Design and Implementation. — , 1997. — С. 580—582. — .
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
U teoriyi kompilyatoriv vi dalennyam nedosya zhnogo ko du angl unreachable code elimination nazivayut optimizaciyu sho vidalyaye nedosyazhnij kod tobto kod yakij mistitsya v programi ale z pevnih prichin nikoli ne vikonuyetsya V grafi potoku upravlinnya programi cej kod mistitsya u vuzlah nedosyazhnih z pochatkovogo vuzla Same peretvorennya bezposeredno ne vplivaye na shvidkist vikonannya programi adzhe vidalyayutsya instrukciyi yaki vse odno nikoli ne vikonuyutsya i ne zajmayut procesornogo chasu ale vono nadaye nepryamij pozitivnij efekt znizhuyuchi tisk na kesh instrukcij i rozshiryuyuchi mozhlivosti podalshih optimizacij sho pracyuyut iz grafom potoku keruvannya PrikladiRozglyanemo takij priklad movoyu Si int foo int a int b b a lt lt 2 return b b 47 Nedostizhimyj kod return 0 Nedostizhimyj kod U comu prikladi operaciya prisvoyuvannya b 47 i podalshij vihid iz proceduri ye nedosyazhnim kodom oskilki vono vidbuvayetsya pislya bezumovnogo povernennya z proceduri Koli pid chas optimizaciyi zaznacheni operaciyi bude vidaleno otrimayemo int foo int a int b b a lt lt 2 return b Poshirenoyu praktikoyu v nalagodzhenni program ye timchasove vidklyuchennya chastini kodu Zazvichaj ce dosyagayetsya komentuvannyam ciyeyi dilyanki kodu sho chasto buvaye skladno cherez nayavnist u programi inshih komentariv abo direktiv preprocesora v C C ce direktivi if 0 endif Vikoristannya vidalennya nedosyazhnogo kodu mozhe sluzhiti alternativoyu viklyuchennyu kodu za dopomogoyu preprocesora Rozglyanemo takij priklad movoyu 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 Kod vseredini operatora if nemozhlivo vikonati oskilki vin nedosyazhnij i bude povnistyu vidalenij pid chas optimizaciyi AlgoritmiCej rozdil statti she ne napisano Vi mozhete dopomogti proyektu napisavshi jogo ZastosuvannyaCej rozdil statti she ne napisano Vi mozhete dopomogti proyektu napisavshi jogo Div takozhNedosyazhnij kod Mertvij kod Vidalennya mertvogo kodu Optimizuvalnij kompilyatorPrimitkiAdvanced compiler design and implementation S 580 Engineering a Compiler S 544 Arhiv originalu za 31 sichnya 2022 Procitovano 5 lipnya 2012 Literatura en and Torczon Engineering a Compiler Morgan Kaufmann 2011 S 550 593 ISBN 978 0 12 088478 0 Aho Alfred V Seti Ravi Ulman Dzheffri D Kompilyatory principy tehnologii instrumenty Vilyams 2003 S 568 613 669 ISBN 5 8459 0189 8 en Advanced Compiler Design and Implementation 1997 S 580 582 ISBN 1 55860 320 4