Död kod

Termen död kod har flera definitioner. Vissa använder termen för att referera till kod (dvs. instruktioner i minnet) som aldrig kan köras under körning. Inom vissa områden av datorprogrammering är död kod ett avsnitt i källkoden för ett program som körs men vars resultat aldrig används i någon annan beräkning . Exekveringen av död kod slösar bort beräkningstid och minne.

Även om resultatet av en död beräkning aldrig kommer att användas, kan det leda till undantag eller påverka något globalt tillstånd, så att borttagning av sådan kod kan ändra programmets utdata och introducera oavsiktliga buggar . Kompilatoroptimeringar är vanligtvis konservativa i sin strategi för borttagning av död kod om det finns någon tvetydighet om huruvida borttagning av den döda koden kommer att påverka programmets utdata. Programmeraren kan hjälpa kompilatorn i denna fråga genom att ytterligare använda statiska och/eller inline -funktioner och möjliggöra användning av länktidsoptimering .

Exempel

     

	   

	 
 int  foo  (  int  iX  ,  int  iY  )  {  int  iZ  =  iX  /  iY  ;  returnera  iX  *  iY  ;  } 

I exemplet ovan, även om divisionen av iX med iY beräknas och aldrig används, kommer den att skapa ett undantag när en division med noll inträffar. Därför kan borttagningen av den döda koden ändra programmets utdata.

Analys

Eliminering av död kod är en form av kompilatoroptimering där död kod tas bort från ett program. Död kodanalys kan utföras med hjälp av levande variabelanalys , en form av statisk kodanalys och dataflödesanalys . Detta till skillnad från oåtkomlig kodanalys som är baserad på kontrollflödesanalys .

Tekniken för eliminering av döda koder är i samma klass av optimeringar som eliminering av oåtkomlig kod och eliminering av redundant kod .

I stora programmeringsprojekt är det ibland svårt att känna igen och eliminera död kod, särskilt när hela moduler blir döda. Testställningar kan få det att se ut som att koden fortfarande är aktiv, och ibland kan avtalsspråk kräva leverans av koden även när koden inte längre är relevant.

Vissa IDE :er (som Xcode, Visual Studio 2010 och Eclipse Galileo) har förmågan att lokalisera död kod under kompileringsstadiet.

Medan de flesta optimeringstekniker försöker ta bort död kod i en implementering, kan det i extrema former av optimering för storlek ibland vara önskvärt att medvetet introducera och noggrant forma till synes död kod, när det gör det möjligt att vika ihop annars orelaterade kodsektioner (och därigenom minska deras kombinerad storlek) så att den extra koden effektivt inte kommer att skada den första exekveringsvägen genom koden utan används för att utföra de åtgärder som är nödvändiga för de alternativa exekveringsvägarna, för vilka andra delar av koden kan bli död kod. På en mer funktionell nivå kan detta ses som både artificiell introduktion av ofarliga/användbara biverkningar och minskning av kodens redundans, men det kan också användas ner till opkodnivå för att möjliggöra användning av kortare instruktioner , vilket inte skulle vara möjligt när kodsekvenser vikas utan samordnad introduktion av biverkningar orsakade av den döda koden.

Se även

externa länkar