Fjerner uopnåelig kode

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

Eksempler

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.

Algoritmer

Ansøgning

Se også

Noter

  1. 1 2 Avanceret compilerdesign og implementering - S. 580.
  2. Engineering a Compiler - S. 544.
  3. MSDN trin for trin. Trin 3 - C++ kommentarer. . Hentet 5. juli 2012. Arkiveret fra originalen 31. januar 2022.

Litteratur