Compiler

Welche Aussage zum Basisblock ist richtig?

  1. ABefehlsfolge ohne Verzweigungen hinein oder heraus, die stets zusammenhängend ausgeführt wird
  2. BZusammenfassung aller Befehle einer Funktion zu einer Einheit
  3. CMehrfach hintereinander geschriebener Schleifenrumpf, wodurch die Zahl der Iterationen sinkt
Antwort und Erläuterung anzeigen

Antwort: A. Befehlsfolge ohne Verzweigungen hinein oder heraus, die stets zusammenhängend ausgeführt wird

Ein Basisblock ist eine Befehlsfolge, die nur am Anfang betreten und nur am Ende verlassen wird; hat die Ausführung einmal begonnen, wird sie weder in der Mitte verlassen noch in der Mitte betreten. Basisblöcke werden an Befehlen, die Sprungziele sind, und direkt nach Verzweigungsbefehlen getrennt. Da die Ausführungsreihenfolge im Block feststeht, sind lokale Optimierungen einfach, und der Gesamtablauf wird als Kontrollflussgraph mit Basisblöcken als Knoten dargestellt. Eine ganze Funktion besteht gewöhnlich aus mehreren Basisblöcken; das Aneinanderreihen von Schleifenrümpfen ist Loop Unrolling.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Compiler

  1. Welche Kombination dessen, was Knoten und Pfeile im Kontrollflussgraphen darstellen, ist richtig?
  2. Welche Eigenschaft der Zwischendarstellung in SSA-Form ist richtig?
  3. Wandelt man den obigen Code in SSA-Form um, so erscheint nach der if-Anweisung ein Ausdruck wie „x3 = φ(x1, x2)“. Welche Funktion der φ-Funktion ist richtig?
  4. Welches ist ein richtiges Beispiel für Constant Folding im Compiler?
  5. Welcher Code ergibt sich schließlich, wenn auf den obigen Code wiederholt Konstantenpropagierung und Constant Folding angewendet werden?

Vergleiche zu diesem Thema