Odstraňování nedostupného kódu

V teorii kompilátoru je eliminace nedosažitelného kódu optimalizací , která odstraňuje nedosažitelný kód , tedy kód, který je obsažen v programu, ale z nějakého důvodu není nikdy spuštěn [1] . V grafu toku řízení programu je tento kód obsažen v uzlech, které jsou z počátečního uzlu nedosažitelné [2] . Samotná konverze nemá přímý vliv na rychlost provádění programu, protože smazané instrukce se stejně nikdy nevykonají a nezabírají čas procesoru ; má ale nepřímý pozitivní vliv, snižuje tlak na instrukční cache a rozšiřuje možnosti pro následné optimalizace, které pracují s grafem řídicího toku [1] .  

Příklady

Zvažte následující příklad C :

int foo ( int a ) { int b ; b = a << 2 ; návrat b ; b = 47 ; /* Nedosažitelný kód */ návrat 0 ; /* Nedosažitelný kód */ }

V tomto příkladu jsou operace přiřazení b = 47a následné ukončení procedury nedosažitelným kódem, protože k němu dochází po bezpodmínečném návratu z procedury. Poté, co optimalizace odstraní uvedené operace, dostaneme:

int foo ( int a ) { int b ; b = a << 2 ; návrat b ; }

Běžnou praxí při ladění programů je dočasné zablokování části kódu [3] . To se obvykle provádí komentářem této části kódu (což je často obtížné kvůli přítomnosti dalších komentářů v programu) nebo direktivami preprocesoru (v C / C++#if 0 to jsou ... direktivy #endif). Použití odstranění nedosažitelného kódu může sloužit jako alternativa k vypnutí kódu pomocí preprocesoru. Zvažte následující příklad Java :

public static int Ukázka () { int a = 5 ; int b = 6 ; int c ; c = a + b _ if ( false ) { /* DEBUG */ System . ven . formát ( "%d" , c ); } return c ; }

Kód uvnitř příkazu ifnelze provést, protože je nedosažitelný a optimalizací bude zcela odstraněn.

Algoritmy

Aplikace

Viz také

Poznámky

  1. 1 2 Pokročilý návrh a implementace kompilátoru - S. 580.
  2. Engineering a Compiler - S. 544.
  3. MSDN krok za krokem. Krok 3 – komentáře v C++. . Získáno 5. července 2012. Archivováno z originálu 31. ledna 2022.

Literatura