Position du problème

Lors de l'exécution d'un programme C il y a trois zones de mémoire différentes, correspondant aux trois durées de vies possibles :
-
la zone contenant les variables statiques ;
-
la zone contenant les variables automatiques (cette zone est gérée en pile puisqu'en C, toute fonction peut être récursive) ;
-
la zone contenant les variables dynamiques (cette zone est généralement appelée le tas).

Un tel découpage se rencontre couramment dans les langages de programmation. Généralement cependant, il n'est pas nécessaire au programmeur de déclarer la classe dans laquelle il désire mettre une variable, cette classe étant choisie de manière autoritaire par le langage.

Les concepteurs du langage C ont voulu offrir plus de souplesse aux programmeurs. En effet, nous venons de voir que l'on pouvait mettre dans la classe des variables statiques une variable qui était locale à une instruction composée. D'autre part, pour des raisons d'efficacité des programmes générés, les concepteurs du langage ont créé une nouvelle classe : la classe register. Quand le programmeur déclare par exemple :

register int i;
ceci est une indication au compilateur, lui permettant d'allouer la variable dans une ressource de la machine dont l'accès sera plus rapide que l'accès à une mémoire (si une telle ressource existe).

Matthieu Moy 2017-02-08