Der Compiler ist ziemlich schlau und hat mehrere Metriken, um herauszufinden, ob etwas inlining ist. Aber manchmal wird der Entwickler wissen, wie die Anwendung ausgeführt wird und weiß, etwas inline zu integrieren, was der Compiler nicht automatisch macht. Allerdings würde ich nie manuell inline stopfen, wenn ich nicht einige Benchmarks gemacht hätte und festgestellt hätte, dass Inline meine Leistung verbessern würde.
Sie können mehr darüber lesen, wie GCC inline verwendet .
Ja, es ist schlau genug. Was aber in den letzten 40 Jahren überhaupt nicht Fortschritte gemacht hat, ist der Aufbau von C-Programmen. Es ist immer noch eine Quellcodedatei.
Um eine Funktion in mehr als einer .c-Datei einzubinden, fügen Sie die Funktionsdefinition in die .h-Datei ein. Und wenn Sie sie nicht inline markieren, wird der Linker über die Mehrfachdefinitionen beschweren.
Der Standard sagt
7.1.2 Funktionsbezeichner
2. Eine Funktionsdeklaration (8.3.5, 9.3, 11.4) mit einem Inline-Spezifizierer deklariert eine Inline-Funktion. Der Inline-Spezifizierer zeigt der Implementierung an, dass eine Inline-Substitution des Funktionskörpers zum Zeitpunkt des Aufrufs dem üblichen Funktionsaufrufmechanismus vorzuziehen ist. Eine Implementierung ist nicht erforderlich, um diese Inline-Substitution zum Zeitpunkt des Aufrufs durchzuführen; selbst wenn diese Inline-Substitution weggelassen wird, müssen die anderen Regeln für Inline-Funktionen, die in 7.1.2 definiert sind, trotzdem eingehalten werden.
Also würde ich inline
mit vielleicht <br />
in HTML vergleichen - es ist eine gute Übung, immer die selbstschließende <br />
zu verwenden. Aber man könnte argumentieren, dass fast alle Browser Implementierungen <br>
und <br />
genau gleich behandeln, was IMO den Punkt verfehlt.
Wie andere bereits angemerkt haben, ist dies in diesen Tagen wahrscheinlich nicht sehr relevant für den Leistungswert. Aber ich denke, es dient immer noch gut als semantisches, intentionstragendes Schlüsselwort.
Tags und Links c performance inline