Qu'est ce qu'une table de symbole?

Quelqu'un peut-il décrire ce qu'est une table de symboles dans le contexte de C et c++?

76
c
demandé sur Pooven 2008-09-16 07:14:58

6 réponses

Il y a deux significations communes et connexes des tables de symboles ici.

Tout d'abord, il y a la table de symboles dans vos fichiers objets. Habituellement, un compilateur C ou c++ compile un fichier source unique dans un fichier objet avec un .obj ou .o extension. Il contient une collection de code exécutable et de données que l'éditeur de liens peut traiter dans une application de travail ou une bibliothèque partagée. Le fichier objet a une structure de données appelée table de symboles qui mappe les différents éléments du fichier objet à des noms que l'éditeur de liens peut comprendre. Si vous appelez une fonction à partir de votre code, le compilateur ne met pas l'adresse finale de la routine dans le fichier objet. Au lieu de cela, il met une valeur d'espace réservé dans le code et ajoute une note qui indique à l'éditeur de liens de rechercher la référence dans les différentes tables de symboles à partir de tous les fichiers objet qu'il traite et d'y coller l'emplacement final.

Deuxièmement, il y a aussi la table de symboles dans une bibliothèque partagée ou une DLL. Ceci est produit par l'éditeur de liens et sert à nommez toutes les fonctions et les éléments de données visibles par les utilisateurs de la bibliothèque. Cela permet au système de faire une liaison à l'exécution, en résolvant les références ouvertes à ces noms à l'emplacement où la Bibliothèque est chargée en mémoire.

Si vous voulez en savoir plus, je suggère l'excellent Livre de John Levine "Linkers and Loaders".texte du lien

70
répondu Ben Combee 2008-09-16 03:28:59

Brièvement, c'est le mappage du nom que vous affectez une variable à son adresse en mémoire, y compris les métadonnées telles que type, scope et size. Il est utilisé par le compilateur.

C'est en général, pas seulement C [++]*. Techniquement, il n'inclut pas toujours l'adresse de mémoire directe. Cela dépend de la langue, de la plate-forme, etc. le compilateur est le ciblage.

22
répondu Steve Landey 2008-09-16 03:16:21

Sous Linux, vous pouvez utiliser la commande:

Nm [fichier objet]

Pour lister la table de symboles de ce fichier objet.

13
répondu root 2011-07-28 16:44:44

La table des symboles est la liste des "symboles" dans un programme/unité. Les symboles sont le plus souvent les noms de variables ou de fonctions. La table de symboles peut être utilisée pour déterminer où seront situées les variables ou les fonctions en mémoire.

8
répondu Joe Schneider 2008-09-16 03:26:42

Consultez la table des symboles entrée Wikipédia.

4
répondu Allan Wind 2011-10-15 12:37:21

Symbol table est une structure de données importante créée et maintenue par les compilateurs afin de stocker des informations sur l'occurrence de diverses entités telles que les noms de variables, les noms de fonctions, les objets, les classes, les interfaces, etc.

0
répondu rashedcs 2017-11-01 13:41:11