Um „Inline“ zu verstehen, muss man die Geschichte verstehen und wissen, wie das Leben vor 20 (und 30) Jahren war.
Wir haben Code auf Computern mit wenig Arbeitsspeicher geschrieben, daher war es einem Compiler nicht möglich, den gesamten Code, aus dem ein Programm bestand, auf einmal zu verarbeiten. Der Compiler war auch sehr langsam, sodass Sie keinen Code neu kompilieren mussten, der sich nicht geändert hatte - 24 Stunden (auf einem Computer, der mehr als ein Top-End-Auto kostete), um den gesamten Code neu zu kompilieren, war für einige Projekte, die ich durchgeführt habe, normal arbeitete an.
Daher wurde jede Codedatei separat in eine Objektdatei kompiliert. Jede Objektdatei begann mit einer Liste aller darin enthaltenen Funktionen, zusammen mit der „Adresse“ der Funktion. Eine Objektdatei enthielt auch eine Liste aller aufgerufenen Funktionen in anderen Objektdateien sowie den Speicherort des Aufrufs.
Ein Linker würde zuerst alle Objektdateien lesen und eine Liste aller von ihm exportierten Funktionen zusammen mit der Datei, in der sie sich befanden, und ihrer Adresse erstellen. Es würde dann alle Objektdateien erneut lesen und sie in die Programmdatei ausgeben, während alle "externen" Funktionsaufrufe mit der Adresse der Funktion aktualisiert würden.
Der Linker hat den vom Compiler erstellten Maschinencode in keiner anderen Weise geändert oder optimiert, als um Verweise auf externe Funktionsaufrufe zu korrigieren. Der Linker war Teil des Betriebssystems und älter als die meisten Compiler. Wenn Leute einen neuen Compiler schrieben, brauchten sie ihn, um mit aktuellen Linkern zu arbeiten und um in der Lage zu sein, auf aktuelle Objektdateien zu verlinken, sonst könnten keine Systemaufrufe gemacht werden.
Der Compiler hat den Code immer nur in der „.c“ - oder „.cpp“ -Datei gesehen, die er zusammen mit allen enthaltenen Header-Dateien kompilierte. Daher konnte keine Optimierung basierend auf Code in anderen „.c“ - oder „.cpp“ -Dateien durchgeführt werden.
Mit dem Schlüsselwort "inline" konnte der Hauptteil einer Funktion (Methode) in einer Header-Datei definiert werden, sodass der Compiler den Code der Funktion beim Kompilieren des aufrufenden Codes verwenden konnte. Angenommen, Sie hätten eine Auflistungsklasse in einer anderen .cpp-Datei definiert. Diese Klasse hätte eine "isEmpty" -Methode, die eine Codezeile enthielte. Anstelle eines Funktionsaufrufs würde das resultierende Programm erheblich beschleunigt wurde der Funktionsaufruf durch diese eine Zeile ersetzt.
Das Schlüsselwort "Inline" wurde zu der Zeit als "billig und einfach" angesehen, um die Kapselung von Daten zu ermöglichen und gleichzeitig die Kosten für Funktionsaufrufe zu vermeiden. Ohne dieses Schlüsselwort hätten viele Programmierer nur Zugriff auf die privaten Felder des Objekts. (Makros, bei denen ein viel schlechterer Weg war, Code zu „inlinen“, als dies zu der Zeit üblich war.)
Heutzutage führen „Linker“ eine Menge Code-Optimierung durch und werden in der Regel von einem Team als Compiler geschrieben. Der Compiler überprüft oft nur, ob der Code korrekt ist, und „komprimiert“ ihn, sodass der Linker die meiste Aufgabe der Maschinencodeerstellung übernimmt.