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.