- Dead code elimination
-
Dead code elimination (englisch für Entfernung von totem Code) ist ein Verfahren aus dem Bereich des Compilerbaus, das nicht verwendete Anweisungen beseitigt. Dadurch kommt es zu einem kleineren Programm mit schnellerer Ausführung.
Erläuterung mit Beispielen
Gegeben sei der folgende Beispielcode in Java:
int i=0; public void foo(){ boolean bar=false; if(bar) { i=2; } i=1; }
Die Variable bar wurde in diesem Fall mit false belegt, was dazu führt, dass die nachfolgende bedingte Anweisung (i = 2) nie ausgeführt werden kann. An dieser Stelle kommt es beim Compilieren zur dead code elimination und die gesamte Verzweigung inklusive der Variable bar werden entfernt, da sie keine Auswirkung auf den verbleibenden Code haben.[1] Der compilierte Code würde danach dann so aussehen:
int i=0; public void foo(){ i=1; }
Ob es zur dead code elimination kommt, hängt vom verwendeten Compiler ab. So lässt sich das folgende Programm durch eine dead code elimination erheblich beschleunigen, wenn der Compiler erkennt, dass 300-mal dieselbe Zuweisung stattfindet:
int func(int a, int b){ int x; for(int i=300;i>0;i--){ x = a + b; // dead store } return x; }
Öffentliche Wahrnehmung
Im November 2010 veröffentlichte Microsoft eine neue Version des Internet Explorers, der scheinbar alle anderen Browser in puncto JavaScript-Geschwindigkeit weit hinter sich ließ. Es stellte sich jedoch schon bald heraus, dass Microsoft eine spezielle Implementation der dead code elimination nutzte, um sich an die Spitze eines bekannten JavaScript-Benchmarks zu katapultieren. In anderen Benchmarks waren die Resultate eher im Mittelfeld.[2]
Einzelnachweise
- ↑ Compilerbau und Optimierung
- ↑ Herbert Braun: Browser-Debatte: Hat Microsoft geschummelt? Heise Online. 18. November 2010.
Wikimedia Foundation.