Compilateurs
Lorsqu'un « déversement » (spill) se produit lors de l'allocation de registres, qu'advient-il du code généré ?
- ALes instructions de sauvegarde sur la pile et de rechargement augmentent, et le code tend à ralentir
- BLe nombre de registres augmente automatiquement et toutes les valeurs tiennent en registres
- 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.