Exood4 Studio - Video Game Development, Toulouse (France)
Exood4 Studios Exood4 Tutorials

   
L a n g a g e   C

L e s   c l a s s e s   d ' a l l o c a t i o n






 La classe d'allocation détermine, pour un identificateur, sa durée de vie, sa portée et son emplacement. Il existe quatre classes d'allocation : auto, static, extern et register.


La classe auto


 Une variable automatique n'existe que dans le bloc où elle est définie : elle est créée lors de l'entrée dans le bloc et elle est détruite à la sortie. Par conséquent, son éventuelle initialisation est éalisée à l'exécution. Elle n'est visible que dans son bloc de définition et dans ses sous-blocs. Son emplacement est généralement sur la pile.

 La classe auto est seulement autorisée pour les variables locales :

void f (void)
{
 auto int i;
 ...
}

 C'est également la classe par défaut des variables locales. C'est pourquoi le mot clé auto n'apparaît presque jamais dans les programmes en C.


La classe static


 Une variable statique existe pendant toute la durée du programme : elle est créée et éventuellement initialisée à la compilation. Sa portée est au plus le fichier source comportant sa définition : si la variable est globale, Elle n'est visible que dans le fichier comportant sa définition, si la variable est locale, sa portée est inchangée et est limitée à son bloc de définition. Son emplacement est généralement dans le segment des données :

void f (void)
{
 static int initialise = 0; /* initialisée (une seule fois) lors de la compilation */
 if ( !initialise )
 {
 /* traitement initial */
 initialise = 1; /* valeur conservée lors du prochain appel de f */
 ...
 }
 ...
}

static void erreur (void) /* fonction visible uniquement dans le fichier de sa définition */
{
 ...
}


La classe extern


 Une variable externe existe pendant tout l'exécution du programme : elle est créée et éventuellement initialisée à la compilation. Elle est visible dans son fichier de définition et dans tout autre fichier s'il comporte une déclaration extern d'une variable de même nom. Son emplacement est généralement dans le segment des données. C'est la classe par défaut de toute variable globale :

#include <stdio.h>
int x;

/* x est définie et sa classe est extern */

main()
{
 ...
}


#include <stdio.h>
extern int x;

/* x est seulement déclarée, sa définition et éventuellement son initialisation se trouvent dans un autre fichier source cependant, x peut être utilisée et modifiée. */

main()
{
 ...
}

 La classe extern permet donc de communiquer entre différents modules via des identificateurs globaux. Néanmoins son utilisation ne favorise pas la modularité et doit rester limitée.


La classe register


 La classe register peut être utilisée lors de la définition de variables locales ou de paramètres. Elle indique au compilateur que l'objet est utilisé de manière intensive et doit être alloué de manière à minimiser le temps d'accès, si possible dans un registre machine.

 Seuls certains types, suivant l'architecture de la machine, peuvent être de classe register.

 Le nombre d'objets de classe register est, suivant l'architecture de la machine, limité à un instant donné, les objets supplémentaires étant considérés alors de classe auto. Cela ne nuit pas à la portabilité bien que l'optimisation réalisée dépende de l'architecture du matériel :

void f (void)
{
 register int i;

 for (i = 0; i < 10000; i++)
 {
 ...
 }
}



Utilisation des classes d'allocation


Identificateur
Classe par défaut
Classe autorisée
Variable globale extern static
Variable locale auto static, register
Fonction extern static



  Retour en haut de page