Maison >développement back-end >C++ >Où sont stockées les variables statiques dans les exécutables C et C ?

Où sont stockées les variables statiques dans les exécutables C et C ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-30 12:07:12211parcourir

Where Are Static Variables Stored in C and C   Executables?

Exploration du stockage des variables statiques en C et C

Les variables statiques jouent un rôle crucial dans la programmation en C et C, permettant aux données de persister tout au long de la durée de vie d'un programme. Mais où exactement ces variables sont-elles stockées dans un fichier exécutable pour garantir qu'aucune collision de noms ne se produise ?

Considérez les extraits de code suivants :

// foo.c
static int foo = 1;
void fooTest() {
  static int bar = 2;
  foo++;
  bar++;
}

// bar.c
static int foo = 10;
void barTest() {
  static int bar = 20;
  foo++;
  bar++;
}

Lors de la compilation et de la liaison de ces fichiers avec une fonction principale qui appelle fooTest() et barTest() à plusieurs reprises, les instructions printf s'incrémentent indépendamment. Cela indique que les variables foo et bar sont locales à leurs unités de traduction respectives.

Allocation de stockage des variables statiques

L'allocation des variables statiques dans un fichier exécutable dépend de leur initialisation.

  • Zéro-initialisé : Les données statiques initialisées à zéro sont placées dans le Segment .BSS (Bloc démarré par symbole). Ce segment est rempli de zéros lors de l'exécution du programme.
  • Non initialisé à zéro : Les données statiques initialisées avec des valeurs non nulles sont placées dans le segment .DATA. Ce segment contient des données initialisées et est chargé en mémoire au démarrage du programme.

Dépendance de la chaîne d'outils

L'emplacement de stockage spécifique des variables statiques peut varier en fonction de la chaîne d'outils utilisée. Pour cette discussion, supposons que nous utilisons la GNU Compiler Collection (GCC).

Conclusion

Les variables statiques en C et C sont stockées dans le segment .BSS ou .DATA d'un exécutable. fichier, en fonction de leur initialisation. Cela garantit que chaque variable statique dispose d'un emplacement mémoire unique et évite les collisions de noms.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn