Compilateurs

Lorsqu'un « déversement » (spill) se produit lors de l'allocation de registres, qu'advient-il du code généré ?

  1. ALes instructions de sauvegarde sur la pile et de rechargement augmentent, et le code tend à ralentir
  2. BLe nombre de registres augmente automatiquement et toutes les valeurs tiennent en registres
  3. CLes valeurs inutilisées sont supprimées et le nombre d'instructions diminue
Afficher la réponse et l'explication

Réponse : A. Les instructions de sauvegarde sur la pile et de rechargement augmentent, et le code tend à ralentir

Le déversement consiste à placer certaines valeurs en mémoire (pile) lorsque les valeurs vivantes simultanément sont plus nombreuses que les registres. Chaque utilisation de la valeur exige une instruction de chargement et chaque modification une instruction de stockage ; les instructions augmentent et le code tend à ralentir du fait des accès mémoire. Le compilateur garde donc en registres les valeurs souvent utilisées, par exemple dans les boucles, et choisit de déverser celles qui le sont peu. Le nombre de registres est fixé par le CPU et n'augmente pas, et cela n'a rien à voir avec la suppression de valeurs inutiles.

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

Autres questions sur Compilateurs

  1. Quel est le principal objectif de l'ordonnancement des instructions par le compilateur ?
  2. Quel effet produit l'optimisation des appels terminaux appliquée au dernier appel récursif de la fonction ci-dessus ?
  3. Quelle différence entre compilateur et interpréteur est correcte ?
  4. Quelle caractéristique d'un environnement d'exécution utilisant la compilation JIT est correcte ?
  5. Quelle est l'architecture de base de LLVM ?

Comparatifs sur ce thème