Comment les variables statiques portant le même nom dans différentes fonctions sont-elles identifiées par le système?

Autant que je sache, on peut avoir deux variables statiques du même nom dans des fonctions différentes? Comment sont-ils gérés par le compilateur et la table des symboles? Comment leurs identités sont-elles gérées séparément?

Les compilateurs ne stockent pas les noms de variables statiques dans la table des symboles de liaison. Ils ne sont que de la mémoire qui fait partie du module en ce qui concerne l’éditeur de liens. (ceci peut ne pas être vrai à 100% dans tous les cas mais c’est effectivement vrai)

Les noms des variables statiques sont généralement inclus dans la table des symboles de débogage.

Lorsque vous transmettez un fichier .c au compilateur, il conserve le nom de tous les symboles connus afin qu’il puisse les reconnaître tels qu’ils seront lorsqu’ils apparaîtront dans le code à venir. Il les mémorise également pour pouvoir donner des messages d’erreur / avertissement utiles, mais il les oublie assez lors de la génération de fichiers de sortie (à moins que des symboles de débogage ne soient générés).

Ils sont probablement mutilés dans la table, de la même manière que la manière dont les fonctions surchargées sont implémentées.

Voir dumpbin /symbols foo.obj si vous voulez jeter un coup d’œil à la table, ou utilisez objdump sur linux.

Cela dépend du compilateur, mais certains incorporés ajoutent simplement un numéro à la fin de chaque nom dupliqué. De cette façon, chaque variable a un nom unique.