Inline-Ersetzung

Inline-Ersetzung

Inline-Ersetzung oder Inline-Expansion ist eine Methode bei kompilierenden Programmiersprachen zur Steigerung der Ausführungsgeschwindigkeit des von ihnen erzeugten Codes, indem unnötige Aufrufe von (kurzen, einfachen) Unterprogrammen vermieden werden. Statt dessen wird der Code der Funktion an den Stellen, wo sie aufgerufen wird, vom Compiler sozusagen einkopiert und kann so zudem bei der Optimierung voll berücksichtigt werden.

Beispiel (in C++)

Folgender Quelltext...

  inline int das_Quadrat_von(int x)
  {
     return x*x;
  }
   
  void f(int j)
  {
     int k = j + das_Quadrat_von(j) + 1;
      
     int m = 2 * das_Quadrat_von(k) + 5;
      
     int p = das_Quadrat_von(j + 1);
      
     int q = das_Quadrat_von(++j + 2);
      
     // ...
  }

...wird vom Compiler so übersetzt, als lautete der Quelltext (ersetzte Stellen farblich hervorgehoben)

  void f(int j)
  {
     int k = j + (j * j) + 1;
      
     int m = 2 * (k * k) + 5;
      
     int p = (j + 1) * (j + 1);
      
     ++j;
     int q = (j + 2) * (j + 2);
      
     // ...
  }

Inline-Ersetzung erfüllt in C++ also einen ähnlichen Zweck wie ein Funktionsmakro, bietet aber zusätzlich die Sicherheit einer statischen Typprüfung wie bei Funktionen und ist wegen geringerer Fehlerträchtigkeit dem Makro vorzuziehen. Sie muss explizit deklariert werden und kann für von Klassen unabhängige, wie auch für Elementfunktionen (Methoden) verwendet werden. In den Interna des Compilers sind Makros und Inline Expansions jedoch nicht zu vergleichen.

Es ist für den Compiler aber nicht für jede beliebig komplizierte Funktion möglich, die vom Programmierer gewünschte Ersetzung auch durchzuführen. Dann wird der normale Funktionsaufruf beibehalten. Vielmehr ist das inline im Beispiel als Empfehlung an den Compiler zu sehen, welcher er aber nicht nachgehen muss. Speziell in C++ gibt es für Ausnahmefälle auch compilerspezifische stärkere Varianten von inline (wie z.B. __forceinline), deren Einsatz jedoch auf Kosten der Portabilität gehen kann. Ohne solche Varianten wird das Inline-Attribut jedoch von den meisten modernen Compiler zumindest bei hohen Optimierungsleveln ignoriert.

Manche Compiler können auch selbstständig für Inline-Ersetzung geeignete Funktionen in der Optimierungsphase identifizieren und expandieren. In der Programmiersprache Eiffel etwa ist nur diese automatische Inline-Ersetzung vorgesehen.


Wikimedia Foundation.

Игры ⚽ Поможем написать курсовую

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Programmiersprache Eiffel — Eiffel ist eine universelle, rein objektorientierte Programmiersprache und wurde 1985 von dem französischen Informatiker Bertrand Meyer und seiner Firma Interactive Software Engineering Inc. (Goleta, Kalifornien) als Alternative zu C++ entworfen …   Deutsch Wikipedia

  • C-Plusplus — C++ Paradigmen: imperativ, strukturiert, objektorientiert, generisch Erscheinungsjahr: 1983 Entwickler: Bjarne Stroustrup …   Deutsch Wikipedia

  • C-plus-plus — C++ Paradigmen: imperativ, strukturiert, objektorientiert, generisch Erscheinungsjahr: 1983 Entwickler: Bjarne Stroustrup …   Deutsch Wikipedia

  • C plus plus — C++ Paradigmen: imperativ, strukturiert, objektorientiert, generisch Erscheinungsjahr: 1983 Entwickler: Bjarne Stroustrup …   Deutsch Wikipedia

  • Cplusplus — C++ Paradigmen: imperativ, strukturiert, objektorientiert, generisch Erscheinungsjahr: 1983 Entwickler: Bjarne Stroustrup …   Deutsch Wikipedia

  • Eiffel (Programmiersprache) — Eiffel Erscheinungsjahr: 1985 Entwickler: Bertrand Meyer und Eiffel Software Einflüsse: Ada, ALGOL, Simula Beeinflusste: Ruby …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”