I compilerteori er unreachable code elimination en optimering , der fjerner unreachable code , det vil sige kode, der er indeholdt i programmet, men af en eller anden grund aldrig bliver eksekveret [1] . I programmets kontrolflowgraf er denne kode indeholdt i noder, der ikke er tilgængelige fra den indledende node [2] . Konverteringen i sig selv påvirker ikke direkte programafviklingshastigheden, fordi de slettede instruktioner alligevel aldrig udføres og ikke optager processortid ; men det har en indirekte positiv effekt, hvilket reducerer trykket på instruktionscachen og udvider mulighederne for efterfølgende optimeringer, der fungerer med kontrolflowgrafen [1] .
Overvej følgende C -eksempel :
int foo ( int a ) { int b ; b = a << 2 ; returnere b ; b = 47 ; /* Uopnåelig kode */ returnere 0 ; /* Uopnåelig kode */ }I dette eksempel er tildelingsoperationen b = 47og den efterfølgende afslutning af proceduren uopnåelig kode, da den sker efter den ubetingede tilbagevenden fra proceduren. Efter at optimeringen har fjernet de angivne operationer, får vi:
int foo ( int a ) { int b ; b = a << 2 ; returnere b ; }En almindelig praksis i debugging programmer er midlertidigt at deaktivere en del af koden [3] . Dette gøres normalt ved at kommentere denne sektion af kode (hvilket ofte er svært på grund af tilstedeværelsen af andre kommentarer i programmet) eller præprocessor -direktiver (i C / C++#if 0 er disse ... direktiver #endif). Brugen af uopnåelig kodefjernelse kan tjene som et alternativ til at slå kode fra med en præprocessor. Overvej følgende Java- eksempel :
public static int Sample () { int a = 5 ; int b = 6 ; int c ; c = a + b _ if ( false ) { /* DEBUG */ System . ud . format ( "%d" , c ); } returnere c ; }Koden inde i sætningen ifkan ikke udføres, fordi den ikke er tilgængelig og vil blive fuldstændig fjernet af optimeringen.