I kompilatorteorin är eliminering av oåtkomlig kod en optimering som tar bort oåtkomlig kod , det vill säga kod som finns i programmet, men som av någon anledning aldrig exekveras [1] . I programmets styrflödesdiagram finns denna kod i noder som inte går att nå från den initiala noden [2] . Konverteringen i sig påverkar inte direkt hastigheten för programexekveringen, eftersom de raderade instruktionerna aldrig exekveras ändå och inte tar upp processortid ; men det har en indirekt positiv effekt, vilket minskar trycket på instruktionscachen och utökar möjligheterna till efterföljande optimeringar som fungerar med kontrollflödesdiagrammet [1] .
Tänk på följande C- exempel :
int foo ( int a ) { int b ; b = a << 2 ; returnera b ; b = 47 ; /* Otillgänglig kod */ returnera 0 ; /* Otillgänglig kod */ }I det här exemplet är tilldelningsoperationen b = 47och den efterföljande avgången från proceduren oåtkomlig kod, eftersom den sker efter den ovillkorliga återgången från proceduren. Efter att optimeringen tar bort de angivna operationerna får vi:
int foo ( int a ) { int b ; b = a << 2 ; returnera b ; }En vanlig praxis vid felsökning av program är att tillfälligt inaktivera en del av koden [3] . Detta görs vanligtvis genom att kommentera denna kodsektion (vilket ofta är svårt på grund av förekomsten av andra kommentarer i programmet) eller förbehandlardirektiv (i C / C++#if 0 är dessa ... direktiv #endif). Användningen av oåtkomlig kodborttagning kan fungera som ett alternativ till att stänga av kod med en förprocessor. Tänk på följande Java- exempel :
public static int Sample () { int a = 5 ; int b = 6 ; int c ; c = a + b _ if ( false ) { /* DEBUG */ System . ut . format ( "%d" , c ); } returnera c ; }Koden inuti satsen ifkan inte köras eftersom den inte går att nå och kommer att tas bort helt av optimeringen.