Qu'est-ce que Inlining (expansion en ligne) ?

Optimisation qui remplace un appel de fonction par le corps de la fonction appelée. Le coût d'appel disparaît et d'autres optimisations deviennent possibles, mais le code grossit.

Nom japonais: インライン展開

« Inlining (expansion en ligne) » apparaît dans 4 questions d'entraînement réparties sur 2 thèmes, dont Compilateurs, Éditeurs de liens, chargeurs et exécutables.

Domaine: Compilateurs

S'entraîner : questions sur Inlining (expansion en ligne)

Quelle combinaison d'avantage et d'inconvénient de l'expansion en ligne (inlining) des fonctions est correcte ?

  1. AAvantage : le code diminue ; inconvénient : le coût d'appel augmente
  2. BAvantage : la compilation est plus rapide ; inconvénient : le résultat d'exécution change
  3. CAvantage : le coût d'appel disparaît ; inconvénient : le code grossit
Afficher la réponse et l'explication

Réponse : C. Avantage : le coût d'appel disparaît ; inconvénient : le code grossit

L'expansion en ligne insère le corps de la fonction à la place de l'appel, ce qui supprime le passage des arguments, le branchement et le retour. Un avantage majeur est que les constantes de l'appelant se propagent dans le corps, rendant efficaces le repliement de constantes et la suppression de code mort. En revanche, chaque appel recopie le corps, ce qui grossit le code et peut augmenter les défauts de cache d'instructions ; on la réserve donc aux petites fonctions ou aux fonctions souvent appelées. Correctement réalisée, elle ne change pas le résultat d'exécution.

« Inlining (expansion en ligne) » dans les explications

Questions mentionnant « Inlining (expansion en ligne) » (4)

  1. Quelle combinaison d'avantage et d'inconvénient de l'expansion en ligne (inlining) des fonctions est correcte ?
  2. Dans le code ci-dessus, quelle optimisation s'applique ensuite après l'expansion en ligne de sq, et avec quel résultat ?
  3. Quelle optimisation l'optimisation à l'édition de liens (LTO) rend-elle possible ?
  4. Quel est l'effet de la définition d'une fonction avec static en C (par exemple static int helper(void)) ?

Termes associés

Représentation intermédiaire Allocation de registres Analyse lexicale Analyse syntaxique Arbre syntaxique abstrait (AST) Bloc de base Compilation JIT Débordement (spill) Déroulage de boucle (loop unrolling) Élimination des sous-expressions communes

Retour au glossaire