Compiler
Welcher Code ergibt sich schließlich, wenn auf den obigen Code wiederholt Konstantenpropagierung und Constant Folding angewendet werden?
int n = 8;
int m = n * 2;
return m + 1;
- Areturn n * 2 + 1;
- Breturn 8 * 2 + m;
- Creturn 17;
Antwort und Erläuterung anzeigen
Antwort: C. return 17;
Bei der Konstantenpropagierung wird n, dem 8 zugewiesen und das danach nicht mehr verändert wird, an den Verwendungsstellen durch 8 ersetzt, sodass m = 8 * 2 entsteht. Constant Folding berechnet 8 * 2 zu 16, also m = 16, und durch weitere Propagierung und Folding wird m + 1 zu 16 + 1 = 17. Die Zuweisungen an n und m werden nicht mehr verwendet und als toter Code entfernt, sodass nur return 17; übrig bleibt. Zwischenstände oder fehlerhafte Ersetzungen sind nicht das Endergebnis.