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!