Classe de stockage
Un
objet
en C peut avoir 5 classes de stockage differents : auto
, register
,
extern
, static
et thread_local
.
Une classe de stockage spécifie l’endroit où l’objet est stocké en mémoire et sa durée de vie .
Un objet de type auto
a une durée de vie
limitée à son bloc. Il est généralement
placé dans la
pile
, en
mémoire vive. Il est possible de créer
un pointeur dessus.
Un objet de type register
a une durée
de vie limitée à son bloc. Il est placé
au plus près du processeur : un registre
, un cache ou dans le pire des cas en
mémoire vive. Il n’est pas possible de
récupérer l’adresse d’un tel objet et donc
de faire pointer un
pointeur
sur un tel objet.
Un objet de type extern
ou static
a une durée de vie limitée à l’exécution
du programme.
Il n’est pas placé sur la pile.
Un tel objet n’est pas limité
en taille contrairement à un objet placé sur la pile. Un objet extern est visible à
n’importe quel fichier du programme qui
le redéclare avec une classe extern
.
Un objet de type static n’est visible que dans le fichier qui le déclare. Si un objet de type static se trouve au sein d’un bloc, sa visibilité est limitée au bloc (mais sa durée de vie reste liée à l’exécution du programme)
Un objet de type thread_local
a une
durée de vie limitée au
thread
qui l’exécute.
Un objet externe à tout bloc a implicitement
une classe extern
. Un objet défini
au sein d’un bloc a une classe auto
.