Compilateurs

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.

S'entraîner sur ce thème Retour au thème

Autres questions sur Compilateurs

  1. Quel est le principal effet du déroulage de boucle (loop unrolling) ?
  2. Dans la boucle ci-dessus, quel calcul est concerné par le déplacement d'expression invariante de boucle (sortie de la boucle) ? (x et y ne sont pas modifiés dans la boucle)
  3. Dans la boucle ci-dessus, quelle transformation correspond à la réduction de force appliquée au calcul d'indice i * 4 ?
  4. Quelle est la principale raison pour laquelle la boucle ci-dessus est difficile à vectoriser avec des instructions SIMD ?
  5. Dans la fonction ci-dessus, pourquoi le compilateur ne peut-il pas, en l'état, sortir de la boucle la lecture de *b ?

Comparatifs sur ce thème