Compilateurs

Quel exemple de repliement de constantes (constant folding) est correct ?

  1. ARegrouper en un seul appel les appels répétés d'une même fonction
  2. BCalculer x = 3 * 4 à la compilation pour obtenir x = 12
  3. CRecopier quatre fois le corps de la boucle pour réduire le nombre d'itérations
Afficher la réponse et l'explication

Réponse : B. Calculer x = 3 * 4 à la compilation pour obtenir x = 12

Le repliement de constantes est une optimisation qui calcule à l'avance les expressions dont la valeur est connue à la compilation et les remplace par la constante résultante. 3 * 4 vaut toujours 12 à chaque exécution ; il est inutile d'effectuer la multiplication à l'exécution. Combiné à la propagation de constantes, il replie aussi les calculs passant par des variables. Il faut toutefois prendre garde, par exemple, à aligner le mode d'arrondi en virgule flottante. La recopie du corps de boucle est le déroulage de boucle, et le regroupement d'appels de fonction une autre optimisation.

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

Autres questions sur Compilateurs

  1. En appliquant de façon répétée la propagation et le repliement de constantes au code ci-dessus, quel code obtient-on finalement ?
  2. Quelle description de l'élimination des sous-expressions communes appliquée au code ci-dessus est correcte ?
  3. Qu'élimine la suppression de code mort (dead code elimination) ?
  4. Quelle combinaison d'avantage et d'inconvénient de l'expansion en ligne (inlining) des fonctions est correcte ?
  5. Quel est le principal effet du déroulage de boucle (loop unrolling) ?

Comparatifs sur ce thème