Fonctions en ligne en C++

Suraj P 12 octobre 2023
  1. Pourquoi les fonctions inline sont utilisées en C++
  2. Implémenter des fonctions inline en C++
  3. Implémentation de constructor et destructor en tant que fonctions inline en C++
  4. Avantages et inconvénients de l’implémentation de fonctions inline en C++
Fonctions en ligne en C++

Cet article traitera des fonctions inline en C++, de la manière de les implémenter, ainsi que des avantages et des inconvénients de leur utilisation.

Pourquoi les fonctions inline sont utilisées en C++

Chaque fois que nous exécutons un programme, le CPU stocke l’adresse mémoire de l’instruction après l’appel de la fonction ; il copie les arguments sur la pile et transfère le contrôle à la fonction spécifiée.

Ensuite, la CPU exécute le code, renvoie la valeur à un emplacement de mémoire spécifique et revient à nouveau à la fonction appelée. Cela peut créer une surcharge supplémentaire si la plupart du temps est consacré à la commutation plutôt qu’à l’exécution de la fonction.

Cette surcharge est insignifiante dans les fonctions volumineuses qui exécutent des tâches complexes gourmandes en CPU puisque la plupart du temps est consacré uniquement à l’exécution.

Cependant, cette surcharge devient importante lorsque nous avons de nombreuses petites fonctions qui n’exécutent que des tâches de base ; la plupart du temps est consacré à la commutation et peu ou pas de temps est consacré à l’exécution.

Ainsi, le concept en ligne peut être pratique lorsque l’on dispose de nombreuses petites fonctions pour gagner du temps de commutation et gagner en efficacité.

Chaque fois qu’une fonction est déclarée comme inline dans le code au moment de la compilation, au lieu d’attribuer une adresse à l’appel de la fonction, elle copie tout le code de la fonction et le place à cet endroit.

Syntaxe:

inline return_type function_name(arguments)
{
...
}

Une fonction inline n’est qu’une requête au compilateur, et donc le compilateur peut l’ignorer si :

  1. la fonction a des variables statiques ;
  2. la fonction a des instructions goto ou switch ;
  3. la fonction est récursive ;
  4. la fonction a des boucles.

La notion de inline est généralement utilisée avec les classes.

Implémenter des fonctions inline en C++

Exemple de code :

#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();
}

Dans le code ci-dessus, nous avons déclaré la fonction comme inline lors de sa définition car c’est une bonne pratique de programmation d’écrire la définition de la fonction inline en dehors de la classe plutôt qu’à l’intérieur de celle-ci.

Cependant, une définition de fonction dans une classe est une définition de fonction inline par défaut, même sans utiliser le mot-clé inline.

Production:

Program using inline function
Enter first value:12
Enter second value:13
Sum of two numbers is 25

Implémentation de constructor et destructor en tant que fonctions inline en C++

En utilisant l’exemple ci-dessus et en créant des fonctions inline en dehors de la classe tout en la définissant, nous pouvons même rendre constructor et destructor comme inline.

Exemple de code :

#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();
}

Production:

Program using inline function
Sum of two numbers is 300
destroying the object

Avantages et inconvénients de l’implémentation de fonctions inline en C++

Voyons maintenant quelques-uns des avantages de l’implémentation de fonctions inline :

  1. La surcharge de l’appel de fonction est réduite.
  2. Il permet d’économiser la surcharge d’un appel de retour d’une fonction.
  3. Économise les frais généraux de pousser et de faire éclater des variables sur la pile.

Bien qu’utile, il présente également quelques inconvénients :

  1. La taille du fichier exécutable binaire peut devenir importante si nous utilisons trop de fonctions inline car la duplication du même code se produira ici.
  2. Trop de fonctions en ligne peuvent réduire le taux de succès du cache pour les instructions, ce qui affecte la vitesse de récupération des instructions de la mémoire cache vers la mémoire primaire.
  3. Dans les systèmes embarqués où la taille du code est plus importante que la vitesse, les fonctions en ligne ne seront pas utiles.
  4. Un battement pourrait se produire, ce qui dégraderait les performances de la mémoire de l’ordinateur.
Auteur: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub

Article connexe - C++ Function