Tar bort oåtkomlig kod

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] .  

Exempel

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.

Algoritmer

Applikation

Se även

Anteckningar

  1. 1 2 Avancerad kompilatordesign och implementering - S. 580.
  2. Konstruera en kompilator - S. 544.
  3. MSDN steg för steg. Steg 3 - C++ kommentarer. . Hämtad 5 juli 2012. Arkiverad från originalet 31 januari 2022.

Litteratur