Compilateurs

Que détermine l'analyse de vivacité (liveness), effectuée en préparation de l'allocation de registres ?

  1. ALe numéro de la ligne où chaque variable est déclarée dans tout le programme
  2. BLes valeurs maximale et minimale des variables
  3. CSi, à chaque point, la valeur peut encore être utilisée plus tard
Afficher la réponse et l'explication

Réponse : C. Si, à chaque point, la valeur peut encore être utilisée plus tard

L'analyse de vivacité détermine, en parcourant le graphe de flot de contrôle, si à chaque point du programme une valeur peut encore être lue par la suite (est vivante). Les valeurs vivantes doivent être conservées en registre, tandis que le registre d'une valeur qui ne servira plus peut être réutilisé pour une autre. Les valeurs vivantes simultanément ne pouvant partager un registre, le graphe d'interférence est construit à partir de ce résultat. Ce n'est pas une analyse de la position des déclarations ou de la plage des valeurs.

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

Autres questions sur Compilateurs

  1. Dans une fonction, le nombre maximal de valeurs vivantes simultanément est de 5. Dans le cas simple où le graphe d'interférence ne crée pas d'autre contrainte que ces 5 valeurs, combien de registres faut-il au minimum pour placer toutes les valeurs en registre sans déversement ?
  2. Si une boucle de 100 itérations est réécrite par déroulage avec quatre copies du corps, combien y a-t-il de tests de comptage et de branchements ? (100 est divisible par 4)
  3. Quel est l'enchaînement courant permettant d'obtenir un exécutable à partir d'un programme C ?
  4. Comment appelle-t-on l'optimisation qui examine par une petite fenêtre de courtes séquences du code machine généré pour remplacer des combinaisons d'instructions inefficaces par de meilleures instructions ?
  5. Dans le code ci-dessus, quelle optimisation s'applique ensuite après l'expansion en ligne de sq, et avec quel résultat ?

Comparatifs sur ce thème