IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
next up previous contents index
Next: Classes de mémoire Up: Les déclarations Previous: Les espaces de noms

Sous-sections

Durée de vie

      Du point de vue de la durée de vie, il existe trois types de variables : les variables statiques, les variables automatiques et les variables dynamiques.

$\bullet$
Les variables statiques sont allouées au début de l'exécution du programme, et ne sont libérées qu'à la fin de l'exécution du programme.

$\bullet$
Les variables automatiques sont allouées à l'entrée d'une instruction composée, et libérées lors de la sortie de l'instruction composée.

$\bullet$
Les variables dynamiques sont allouées et libérées explicitement par le programmeur, à l'aide des fonctions malloc et free.

Dans les langages de programmation, il y a généralement un lien étroit entre la portée de la déclaration d'une variable et sa durée de vie. Il est classique en effet, qu'une variable globale (c'est à dire dont la déclaration se trouve à l'extérieur de toute fonction), soit une variable statique, et qu'une variable locale à une procédure ou fonction, soit une variable automatique.

Dans le langage C, le programmeur a davantage de liberté. Les variables globales sont ici aussi des variables statiques, mais les variables locales peuvent être au choix du programmeur statiques ou automatiques. Si la déclaration d'une variable locale est précédée du mot clé static, cette variable sera statique, si elle est précédée du mot-clé auto, elle sera automatique, et en l'absence de l'un et l'autre de ces mots-clés, elle sera prise par défaut de type automatique.

Discussion

Cette liberté de donner à une variable locale une durée de vie égale à celle du programme, permet de résoudre des problèmes du type exposé ci-dessous. Imaginons une procédure qui pour une raison quelconque doit connaître combien de fois elle a été appelée. Le programmeur a besoin d'une variable dont la durée de vie est supérieure à celle de la procédure concernée, ce sera donc une variable statique. Cependant cette variable doit être une variable privée de la procédure, (il n'y a aucune raison qu'une autre procédure puisse en modifier la valeur), il faut donc que ce soit une variable locale à la procédure. En C, on programmera de la manière suivante :

void proc()
{
static int nb_appel = 0;

nb_appel++;
...
}
Dans d'autres langages, de manière à satisfaire les contraintes de durée de vie, on aurait été obligé de faire de la variable nb_appel, une variable globale, la rendant ainsi accessible aux autres procédures, ce qui est tout à fait illogique.


next up previous contents index
Next: Classes de mémoire Up: Les déclarations Previous: Les espaces de noms
Bernard Cassagne
1998-12-09