Variables registres

Le microprocesseur qui exécute le programme ne peut pas faire d’opérations directes sur la mémoire. Ainsi, s’il doit exécuter :

k = i + j;

il lit d’abord les deux entiers i et j à partir de la mémoire, en les recopiant dans des petites cases mémoire personnelles que l’on appelle registres. Il peut alors additionner deux de ces registres, et placer le résultat obtenu dans un troisième. Puis ce troisième est replacé en mémoire à l’adresse du résultat k.

Ces opérations de lecture et d’écriture en mémoire sont très rapides, mais provoquent toutefois un léger ralentissement des programmes.

Lorsqu’une vitesse élevée est souhaitée, on peut demander au compilateur de placer une variable dans un registre, et non en mémoire. Il suffit d’écrire :

register int i;

le mot int étant facultatif, puisqu’il s’agit du type par défaut. Dans ce cas, le compilateur essaie d’utiliser un registre pour i.

Cependant, il se peut que les registres soient déjà utilisés. Dans ce cas, aucune erreur n’est produite, mais la variable est placée en mémoire normale, comme si l’on n’avait pas écrit le mot register.

Ce qualificatif register est un reste des temps héroïques où la programmation était beaucoup plus proche du langage machine, et où la moindre différence de temps comptait ; époque aussi où les compilateurs étaient peu performants. De nos jours, tous les compilateurs essaient de placer les variables automatiques dans des registres, même si elles ne sont pas déclarées register. Il se peut donc qu’une variable soit en fait dans un registre sans que vous le sachiez ; sont particulièrement visés, les compteurs de boucle et les variables très fugitives.

De ce fait, déclarer une variable register n’améliorera que rarement les performances ; cela peut même les dégrader, en incitant le compilateur à réserver un registre pour cette variable, alors qu’une autre l’utiliserait avec plus de profit. Pour toutes ces raisons, il est préférable de ne pas utiliser l’indication register, bien que cela ne puisse aucunement provoquer de problèmes.

Précédent Précédent Sommaire Sommaire Suivant Suivant