Maison > développement back-end > C++ > Où sont allouées les variables statiques en C et C ?

Où sont allouées les variables statiques en C et C ?

Mary-Kate Olsen
Libérer: 2024-12-29 15:06:12
original
991 Les gens l'ont consulté

Where Are Static Variables Allocated in C and C  ?

Allocation de variables statiques en C et C

En C et C, les variables statiques sont allouées dans des segments spécifiques d'un fichier exécutable pour éviter les conflits de noms entre les différentes unités de traduction. Lors de la compilation de plusieurs fichiers sources, tels que les fichiers foo.c et bar.c dans le code fourni, chaque unité de traduction crée sa propre copie des variables statiques.

L'emplacement où les variables statiques sont stockées dépend du fait que ils sont initialisés à zéro ou non. Les statiques initialisées à zéro sont placées dans le segment .BSS, tandis que les statiques non initialisées à zéro vont dans le segment .DATA.

Dans l'exemple donné, foo et bar sont initialisés à des valeurs non nulles. Ils seront donc alloués dans le segment .DATA. Le compilateur réserve de l'espace dans le segment .DATA pour ces variables et leurs valeurs y sont stockées.

Lorsque l'exécutable est lié, le contenu des segments .DATA et .BSS est copié dans les sections appropriées du Fichier ELF. Le segment .DATA est généralement fusionné dans la section .text (code), tandis que le segment .BSS est alloué dans la région BSS de la mémoire du programme au moment de l'exécution.

Dans la chaîne d'outils GCC, l'emplacement du fichier statique les variables peuvent être examinées à l'aide de l'option -Xlinker -d', qui affiche les sections ELF et leur contenu. En examinant les sections .data et .bss`, vous pouvez vérifier l'allocation de vos variables statiques et vous assurer qu'elles n'entrent pas en conflit les unes avec les autres.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal