Compiler

Welche Kombination aus Vor- und Nachteil des Inlinings von Funktionen ist richtig?

  1. AVorteil ist kleinerer Code, Nachteil ist mehr Aufrufaufwand
  2. BVorteil ist schnellere Kompilierung, Nachteil ist, dass sich das Ausführungsergebnis ändert
  3. CVorteil ist der entfallende Aufrufaufwand, Nachteil ist größerer Code
Antwort und Erläuterung anzeigen

Antwort: C. Vorteil ist der entfallende Aufrufaufwand, Nachteil ist größerer Code

Beim Inlining wird anstelle des Aufrufs der Funktionsrumpf eingefügt, sodass der Aufwand für Argumentübergabe, Sprung und Rückkehr entfällt. Ein großer Vorteil ist zudem, dass Konstanten usw. der aufrufenden Seite in den Rumpf propagiert werden und Constant Folding sowie Entfernung von totem Code greifen. Andererseits entsteht bei jedem Aufruf eine Kopie des Rumpfs, der Code wächst, und es können mehr Instruktionscache-Misses auftreten; daher werden kleine oder häufig aufgerufene Funktionen ausgewählt. Bei korrekter Ausführung ändert sich das Ergebnis nicht.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Compiler

  1. Welche Hauptwirkung von Loop Unrolling (Schleifenentfaltung) ist richtig?
  2. 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.)
  3. Welche Transformation ist richtig, wenn in der obigen Schleife auf die Indexberechnung i * 4 Strength Reduction angewendet wird?
  4. Was ist der Hauptgrund, warum sich die obige Schleife mit SIMD-Befehlen schwer vektorisieren lässt?
  5. Warum kann der Compiler in der obigen Funktion die Optimierung, das Lesen von *b aus der Schleife herauszuziehen, nicht ohne Weiteres durchführen?

Vergleiche zu diesem Thema