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;
  1. Areturn n * 2 + 1;
  2. Breturn 8 * 2 + m;
  3. 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.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Compiler

  1. Welche Aussage ist richtig, wenn auf den obigen Code die Eliminierung gemeinsamer Teilausdrücke angewendet wird?
  2. Was wird bei der Entfernung von totem Code (Dead Code Elimination) entfernt?
  3. Welche Kombination aus Vor- und Nachteil des Inlinings von Funktionen ist richtig?
  4. Welche Hauptwirkung von Loop Unrolling (Schleifenentfaltung) ist richtig?
  5. Welche Berechnung in der obigen Schleife ist Ziel der Verschiebung von schleifeninvarianten Ausdrücken (Loop-Invariant Code Motion, aus der Schleife heraus)? (x und y werden in der Schleife nicht verändert.)

Vergleiche zu diesem Thema