Programme principal et fonctions
163
En fait, à partir du moment où existent des variables locales, il faut également prévoir la gestion des emplacements mémoire correspondants.
Bien entendu, on pourrait leur attribuer des emplacements fixes pour toute la durée de
l’exécution du programme. Mais cette démarche ne serait guère économique puisque ces
variables n’ont besoin d’exister que pendant l’exécution d’une fonction. Qui plus est, comme
nous le comprendrons plus loin, elle ne permettrait pas la récursivité des appels.
On pourrait également soumettre ces variables locales à la gestion dynamique. Toutefois,
pour des questions de rapidité d’accès à ces emplacements, on utilise généralement un mécanisme dit de pile qui consiste à utiliser un bloc de mémoire unique dans lequel on « empile »
et « dépile » les emplacements nécessaires au fur et à mesure des besoins. Plus précisément, à
chaque appel d’une fonction, on réserve sur le « haut » de cette pile (dont l’adresse figure
dans un « pointeur de pile ») l’emplacement nécessaire à toutes les variables locales de la
fonction 1 et on met à jour le pointeur, en « l’incrémentant » de façon appropriée. Lors de la
sortie de la fonction, on « décrémente » le pointeur de la même quantité. Ce mécanisme très
simple (on a juste un pointeur de pile à gérer) permet de faire partager le même espace à des
variables locales qui n’ont pas à coexister. Il n’utilise que l’espace nécessaire (toute la partie
sous le pointeur de pile correspond à des variables locales existantes). Il fonctionne (heureusement) avec les appels imbriqués de fonction et il permet la récursivité.
6 Programme principal et fonctions
Jusqu’ici, nous avons distingué le « programme » et les « fonctions » qu’il pouvait appeler.
En fait, dans la plupart des langages procéduraux, ce programme est lui-même considéré
comme une fonction, nommée souvent fonction principale. Celle-ci possède alors un en-tête
et un corps (voyez éventuellement certains exemples de programmes de la rubrique
« Exemples langages »). Elle peut aussi fournir un résultat qui se touve alors exploité par
l’environnement qui a « lancé » le programme.
Dans ces conditions, ce que nous avons nommé « les variables du programme » deviennent
alors des variables locales à cette fonction principale.
En revanche, les variables globales (lorsqu’elles existent) sont alors définies en dehors de
toute fonction, y compris la fonction principale et, en toute rigueur, ce sont les seuls éléments
soumis à une allocation statique. Les variables locales à la fonction principale sont en effet
allouées comme les autres variables locales. Toutefois, elles se voient allouées en premier et
elles existent pendant toute la durée du programme. Par exemple, si l’on a affaire à un
mécanisme de pile, les variables de la fonction principale occupent en permanence le dessous
de la pile. En définitive, on voit qu’il ne s’agit là que de différences « technologiques » qui
n’ont pas d’incidence sur les concepts fondamentaux tels que nous les avons exposés ici.
1. Ainsi que, en toute rigueur, à la valeur de retour et à l’adresse de retour dans le programme appelant.
Précédent

- 186/370

Suivant