Antwort
Eine Inline-Funktion ist eine Funktion, bei der der Compiler den Code aus der Funktionsdefinition direkt in den Code der aufrufenden Funktion kopiert, anstatt einen separaten Satz von Anweisungen im Speicher zu erstellen. Dadurch entfällt der Overhead für die Aufrufverknüpfung, und es können sich erhebliche Optimierungsmöglichkeiten ergeben. Die Verwendung des „Inline“-Spezifizierers ist nur ein Vorschlag an den Compiler, dass eine Inline-Erweiterung durchgeführt werden kann; es steht dem Compiler frei, den Vorschlag zu ignorieren.
Einige der Auswirkungen des Inlinings sind:
- In den meisten Fällen erhöht das Inlining die Programmgröße. Aber in einigen Fällen, wenn die Funktionsgröße kleiner ist als die Größe des Funktionsaufrufs, könnte Inlining die Programmgröße verringern.
- In den meisten Fällen könnte Inlining die Ausführungszeit verbessern, indem es den Aufruf-Overhead vermeidet und möglicherweise vom Optimierer durchschaut wird (wodurch es zu einer undurchsichtigen Funktion wird), um mehr Optimierungsmöglichkeiten zu erhalten. Wenn die Funktion jedoch nicht häufig aufgerufen wird, wird sie keine sichtbare Laufzeitverbesserung haben.
- Inlining erhöht die praktische Kopplung, da sich der Aufrufer potenziell auf die internen Implementierungsdetails des inlined Codes verlassen muss. Das Problem bei der praktischen Kopplung besteht darin, dass der Aufrufer neu kompiliert werden muss, wenn sich der Inline-Aufrufer ändert. Das kostet Build- und Entwicklungszeit.
Am besten ist es, mit dem Inlining zu warten, bis Sie das Profiling Ihres Programms abgeschlossen haben. Dadurch lässt sich feststellen, ob das Inlining einen zusätzlichen Nutzen bringt.