Was ist statische Inline in C (nicht C ++)? Ich bin sehr verwirrt darüber, warum viele Funktionen als ' statische Inline ' unter Linux-Kernel.


Beste Antwort

Wenn eine Funktion als static definiert ist, kann die Funktion nur in derselben Quelldatei gesehen und verwendet werden. Es kann nicht von außerhalb der Quelldatei aufgerufen werden, in der es definiert ist (es sei denn, ein Funktionszeiger wird zum Aufrufen verwendet). Die Funktion ist außerhalb der aktuellen Quelldatei effektiv „ausgeblendet“.

Wenn eine Funktion als inline definiert ist, fragen Sie die Compiler, um den Code für die Interna der Funktion genau dort zu generieren, wo die Funktionsaufrufe stattfinden, anstatt Aufrufe an die Funktion zu generieren. Diese Technik kann die Leistung verbessern, indem der Funktionsaufruf-Overhead eliminiert wird, kann jedoch infolgedessen den Speicherbedarf des generierten Codes erhöhen. Der Compiler ist jedoch nicht verpflichtet, den Code der Funktion inline zu generieren. Wenn die Funktion also zu lang oder zu komplex ist oder der Compiler dies aus irgendeinem Grund nicht kann, wird ein normaler Funktionsaufruf generiert. Aus diesem Grund sagen wir, dass Inline nur ein Hinweis an den Compiler ist.

Zusammenfügen, eine Funktion, die als beide static und inline ist eine, die außerhalb der aktuellen Quelldatei unsichtbar ist und deren Code dies tut Inline generiert werden, wo immer Sie es aufrufen, wenn der Compiler dies kann. Dieser Ansatz wird häufig für sehr kleine, einfache, häufig als interne Hilfsfunktionen bezeichnete Funktionen verwendet, die nicht Teil einer öffentlichen API sind.

Antwort

Bei Inline-Funktionen wird der Code in Sie werden ohne den Aufwand des Funktionsaufrufs in die aufrufende Funktion kopiert.

Im Kernel ist sie weit verbreitet. Dies geschieht normalerweise, um die Leistung zu verbessern und zu optimieren, obwohl dies nicht unbedingt der Fall ist.

Es wird hauptsächlich für kleine zeitkritische Funktionen verwendet, und wir können dadurch große Leistungsunterschiede feststellen.

Selbst wenn wir kein Inline-Schlüsselwort verwenden, versucht der Compiler möglicherweise, im Rahmen der Optimierung Inlining durchzuführen.

Als Faustregel sollten statische Inline-Funktionen in einem Header enthalten sein. Es definiert eine Inline-Funktion mit interner Verknüpfung. Wir können also sagen, dass solche Funktionen lokal für eine Übersetzungseinheit sind und in dieser inline sind.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.