Le microprocesseur qui exécute le programme ne peut pas faire dopérations directes sur la mémoire. Ainsi, sil doit exécuter :
k = i + j;
il lit dabord les deux entiers i et j à partir de la mémoire, en les recopiant dans des petites cases mémoire personnelles que lon 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 à ladresse 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.
Lorsquune 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, puisquil sagit du type par défaut. Dans ce cas, le compilateur essaie dutiliser un registre pour i.
Cependant, il se peut que les registres soient déjà utilisés. Dans ce cas, aucune erreur nest produite, mais la variable est placée en mémoire normale, comme si lon navait 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 quune 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
naméliorera que rarement les performances ; cela peut même les dégrader, en incitant le compilateur à réserver un registre pour cette variable, alors quune autre lutiliserait avec plus de profit. Pour toutes ces raisons, il est préférable de ne pas utiliser lindication register
, bien que cela ne puisse aucunement provoquer de problèmes.
Précédent | Sommaire | Suivant |