Inline-Funktionen könnten es schneller machen: Wie oben gezeigt, kann die prozedurale Integration eine Reihe von unnötigen Anweisungen entfernt werden, was die Dinge schneller laufen.
Inline-Funktionen könnten es langsamer machen: Zu viel Inlining kann den Code aufblähen, was zu "Thrashing" führen kann auf bedarfsgesteuerten Systemen mit virtuellem Arbeitsspeicher Systemen führen kann. Mit anderen Worten, wenn die Größe der ausführbaren Datei zu groß ist, wird das System möglicherweise die meiste Zeit damit verbringen auf die Festplatte, um das nächste Stück Code zu holen Code zu holen.
Inline-Funktionen könnten es größer machen: Dies ist der Begriff der Codeaufblähung, wie oben beschrieben. Zum Beispiel, wenn ein System 100 Inline-Funktionen hat, von denen jede von denen jede 100 Bytes an ausführbarem Code und wird an 100 Stellen aufgerufen aufgerufen wird, ist das ein Zuwachs von 1 MB. Wird diese 1MB Probleme verursachen? Wer weiß es nicht, aber es ist möglich, dass diese dass die letzten 1 MB das System zum zum "Thrash" führen, und das könnte die Dinge verlangsamen.
Inline-Funktionen könnten es ermöglichen kleiner machen: Der Compiler erzeugt oft mehr Code für Push/Pop Registern/Parametern als bei einer Inline-Erweiterung des Funktionskörpers. Dies geschieht bei sehr kleinen Funktionen, und es passiert auch mit großen Funktionen, wenn der Optimierer in der Lage ist in der Lage ist, eine Menge redundanten Code zu entfernen durch prozedurale Integration zu entfernen - das heißt d.h. wenn der Optimierer in der Lage ist, die die große Funktion klein zu machen.
Inline-Funktionen können dazu führen, dass Thrashing verursachen: Inlining kann die Größe der ausführbaren Binärdatei erhöhen, und dies kann zu Thrashing führen.
Inline-Funktionen könnten verhindern, dass Thrashing: Die Größe der Arbeitsmenge (Anzahl der Seiten, die gleichzeitig im Speicher sein müssen Speicher sein müssen) kann sich verringern, auch wenn die Größe der ausführbaren Datei ansteigt. Wenn f() g() aufruft, befindet sich der Code oft auf zwei verschiedenen Seiten; wenn der Compiler prozedural den Code von g() in f() integriert, befindet sich der Code oft auf der Seite gleichen Seite.
Inline-Funktionen könnten die Anzahl der Cache-Fehlversuche: Inlining kann dazu führen, dass sich eine innere Schleife über mehrere Zeilen des Speicher-Caches erstreckt, und das kann zu einer Überlastung des Speicher-Cache verursachen.
Inline-Funktionen können die Anzahl der Cache-Fehlversuche: Inlining verbessert normalerweise die Lokalität der Referenz innerhalb des Binärcodes, was die die Anzahl der Cache-Zeilen verringern Cache-Zeilen, die für die Speicherung des Codes einer inneren Schleife zu speichern. Dies könnte letztlich zu einer CPU-gebundene Anwendung schneller laufen.
Inline-Funktionen könnten irrelevant sein für die Geschwindigkeit: Die meisten Systeme sind nicht CPU-gebunden. Die meisten Systeme sind I/O-gebunden, datenbankgebunden oder netzwerkgebunden, was bedeutet, dass der Engpass im System Gesamtleistung des Systems ist das Dateisystem Dateisystem, die Datenbank oder das Netzwerk. Es sei denn, Ihr "CPU-Zähler" steht auf 100% steht, werden Inline-Funktionen wahrscheinlich nicht Ihr System nicht schneller machen. (Selbst bei CPU-gebundenen Systemen, helfen Inline-Funktionen nur, wenn sie innerhalb des Engpasses verwendet werden selbst verwendet wird, und der Engpass ist typischerweise nur in einem kleinen Prozentsatz des Codes.)
Es gibt keine einfachen Antworten: Man muss man muss damit spielen, um herauszufinden, was am besten ist. Geben Sie sich nicht mit simplen Antworten zufrieden wie "Verwende niemals Inline-Funktionen" oder "Verwende immer Inline-Funktionen" oder "Verwende Inline-Funktionen, wenn und nur wenn die Funktion weniger als N Zeilen Code ist." Diese allgemeingültigen Regeln sind vielleicht einfach aufzuschreiben, aber sie führen aber zu suboptimalen Ergebnissen.