Compiler
Welche Aussage ist richtig, wenn auf den obigen Code die Eliminierung gemeinsamer Teilausdrücke angewendet wird?
x = (a + b) * c;
y = (a + b) * d;
- Aa + b wird nur einmal berechnet, in einer temporären Variablen abgelegt und in den beiden Ausdrücken wiederverwendet
- Bx und y sind ähnliche Ausdrücke, daher wird die Berechnung eines von beiden entfernt
- CMultiplikationen werden durch Additionen ersetzt, um die Berechnung zu erleichtern
Antwort und Erläuterung anzeigen
Antwort: A. a + b wird nur einmal berechnet, in einer temporären Variablen abgelegt und in den beiden Ausdrücken wiederverwendet
Die Eliminierung gemeinsamer Teilausdrücke ist eine Optimierung, die Ausdrücke mit gleichem Wert, die mehrfach berechnet werden, nur einmal berechnet und das Ergebnis wiederverwendet. In diesem Beispiel wird t = a + b vorab berechnet und mit x = t * c und y = t * d eine Addition eingespart. Es muss jedoch sichergestellt sein, dass a und b zwischen den beiden Ausdrücken nicht überschrieben werden. x und y sind verschiedene Werte, daher kann keiner von beiden entfernt werden. Das Ersetzen von Multiplikationen durch leichtere Operationen ist eine andere Optimierung namens Strength Reduction.