Inline-Funktionen in C++
-
Warum
inline
-Funktionen in C++ verwendet werden -
Implementieren Sie
inline
-Funktionen in C++ -
Implementieren von
constructor
unddestructor
alsinline
-Funktionen in C++ -
Vor- und Nachteile der Implementierung von
inline
-Funktionen in C++
Dieser Artikel behandelt inline
-Funktionen in C++, wie man sie implementiert und welche Vor- und Nachteile ihre Verwendung hat.
Warum inline
-Funktionen in C++ verwendet werden
Immer wenn wir ein Programm ausführen, speichert die CPU die Speicheradresse der Anweisung nach dem Funktionsaufruf; Es kopiert die Argumente auf den Stack und übergibt die Steuerung an die angegebene Funktion.
Dann führt die CPU den Code aus, gibt den Wert an einer bestimmten Speicherstelle zurück und kehrt wieder zur aufgerufenen Funktion zurück. Es kann zu einem zusätzlichen Overhead führen, wenn die meiste Zeit für das Umschalten anstatt für das Ausführen der Funktion aufgewendet wird.
Dieser Overhead ist bei großen Funktionen, die komplexe CPU-intensive Aufgaben ausführen, unbedeutend, da die meiste Zeit nur für die Ausführung aufgewendet wird.
Dieser Overhead wird jedoch erheblich, wenn wir viele kleine Funktionen haben, die nur grundlegende Aufgaben ausführen. Die meiste Zeit wird für das Wechseln aufgewendet, und wenig bis gar keine Zeit wird für die Ausführung aufgewendet.
Das Konzept inline
kann also praktisch sein, wenn wir viele kleine Funktionen haben, um Schaltzeit zu sparen und die Effizienz zu steigern.
Immer wenn eine Funktion zur Kompilierzeit im Code als inline
deklariert wird, kopiert sie den gesamten Funktionscode und fügt ihn an dieser Stelle ein, anstatt beim Funktionsaufruf eine Adresse zuzuweisen.
Syntax:
inline return_type function_name(arguments)
{
...
}
Eine inline
-Funktion ist nur eine Anfrage an den Compiler, daher kann der Compiler sie ignorieren, wenn:
- die Funktion hat statische Variablen;
- die Funktion hat
goto
- oderswitch
-Anweisungen; - die Funktion ist rekursiv;
- Die Funktion hat Schleifen.
Der Begriff inline
wird im Allgemeinen bei Klassen verwendet.
Implementieren Sie inline
-Funktionen in C++
Beispielcode:
#include <iostream>
using namespace std;
class myClass {
int a, b;
public:
void sum();
};
inline void myClass ::sum() {
cout << "Enter first value:";
cin >> a;
cout << "Enter second value:";
cin >> b;
cout << "Sum of two numbers is " << a + b << endl;
}
int main() {
cout << "Program using inline function\n";
myClass obj;
obj.sum();
}
Im obigen Code haben wir die Funktion als inline
deklariert, während wir sie definiert haben, weil es eine gute Programmierpraxis ist, die eigentliche inline
-Funktionsdefinition außerhalb der Klasse zu schreiben und nicht innerhalb der Klasse.
Eine Funktionsdefinition in einer Klasse ist jedoch standardmäßig eine inline
-Funktionsdefinition, auch ohne das Schlüsselwort inline
.
Ausgabe:
Program using inline function
Enter first value:12
Enter second value:13
Sum of two numbers is 25
Implementieren von constructor
und destructor
als inline
-Funktionen in C++
Wenn wir das obige Beispiel verwenden und inline
-Funktionen außerhalb der Klasse erstellen, während wir sie definieren, können wir sogar constructor
und destructor
als inline
machen.
Beispielcode:
#include <iostream>
using namespace std;
class myClass {
int a, b;
public:
myClass();
~myClass();
void sum();
};
inline myClass::myClass() {
a = 100;
b = 200;
}
inline myClass::~myClass() { cout << "destroying the object\n"; }
inline void myClass ::sum() {
cout << "Sum of two numbers is " << a + b << endl;
}
int main() {
cout << "Program using inline function\n";
myClass obj;
obj.sum();
}
Ausgabe:
Program using inline function
Sum of two numbers is 300
destroying the object
Vor- und Nachteile der Implementierung von inline
-Funktionen in C++
Schauen wir uns nun einige der Vorteile der Implementierung von inline
-Funktionen an:
- Overhead des Funktionsaufrufs wird reduziert.
- Es spart den Overhead eines Rückrufs von einer Funktion.
- Spart Overhead beim Pushen und Popping von Variablen auf dem Stack.
Obwohl es nützlich ist, hat es auch einige Nachteile:
- Die Größe der ausführbaren Binärdatei kann groß werden, wenn wir zu viele
inline
-Funktionen verwenden, da hier derselbe Code dupliziert wird. - Zu viele Inline-Funktionen können die Cache-Trefferrate für die Befehle verringern, was sich auf die Geschwindigkeit des Befehlsabrufs vom Cache-Speicher zum Primärspeicher auswirkt.
- In eingebetteten Systemen, wo die Codegröße wichtiger ist als die Geschwindigkeit, sind
inline
-Funktionen nicht hilfreich. - Thrashing kann auftreten, wodurch die Speicherleistung des Computers beeinträchtigt wird.