Allocation de registre

Définition - Que signifie l'allocation de registre?

L'allocation de registre fait référence à la pratique d'attribuer des variables aux registres ainsi qu'à la gestion du transfert de données vers et hors des registres. L'attribution de registre peut se produire:

  • Sur un bloc de base, appelé allocation de registre local
  • Sur une fonction ou une procédure entière, appelée allocation globale de registre
  • Sur les limites de fonction traversées au moyen d'un graphe d'appel, connu sous le nom d'allocation de registre inter-procédurale

Definir Tech explique l'attribution des registres

Au cours de la compilation, le compilateur doit déterminer la manière dont les variables sont allouées à une petite plage spécifique de registres. Certaines des variables peuvent ne pas être utilisées ou sont dites «en direct» simultanément. Cela conduit à attribuer certains registres à plusieurs variables. Néanmoins, deux variables actives simultanées ne peuvent pas être attribuées exactement au même registre sans altérer la valeur.

Les variables qui ne peuvent pas être attribuées à certains registres doivent être stockées dans la RAM et doivent être chargées dans et hors pour chaque lecture et écriture, respectivement, une procédure connue sous le nom de spilling. L'accès aux registres est beaucoup plus rapide que l'accès à la RAM. De plus, il accélère le temps d'exécution du programme compilé; par conséquent, les compilateurs efficaces visent à affecter autant de variables aux registres qu'ils le peuvent.

Généralement, la plupart des allocateurs de registre affectent chaque variable à la mémoire principale ou à un registre d'unité centrale de traitement (CPU). La vitesse est le principal avantage lors de l'utilisation d'un registre. Les ordinateurs comportent une plage finie de registres, ce qui signifie que toutes les variables disponibles ne peuvent pas être attribuées aux registres. Le processus de déplacement d'une variable d'un registre vers la mémoire est connu sous le nom de spilling, tandis que la procédure inverse de déplacement d'une variable de la mémoire vers un registre est appelée remplissage. L'allocation intelligente des registres est une étape cruciale pour tous les compilateurs.

Il existe deux types d'allocation de registre:

  • Allocation de registre local: Il s'agit d'un processus d'allocation d'un bloc de base (ou hyper bloc ou super bloc) à la fois. L'allocation des registres locaux augmente la vitesse.
  • Allocation globale des registres: Si l'utilisation des registres est faible en utilisant l'allocation locale, il est important d'utiliser l'allocation globale des registres. Dans l'allocation de registre globale simple, les valeurs les plus actives sont allouées dans chaque boucle interne. L'allocation de registre globale complète utilise une procédure pour identifier les plages en direct dans un graphique de flux de contrôle, attribuer des plages en direct et également diviser les plages selon les besoins.