web-dev-qa-db-fra.com

Qu'est-ce qu'une table de symboles?

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

78
jdt141

Il existe deux sens communs et liés des tables de symboles ici.

Premièrement, il y a la table des symboles dans vos fichiers d'objet. Généralement, un compilateur C ou C++ compile un fichier source unique en un fichier objet avec une extension .obj ou .o. Il contient une collection de code exécutable et de données que l’éditeur de liens peut traiter en une application opérationnelle ou une bibliothèque partagée. Le fichier objet comporte une structure de données appelée table des 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 place pas l'adresse finale de la routine dans le fichier objet. Au lieu de cela, il insère 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’elle traite et d’y coller l’emplacement final.

Deuxièmement, il y a aussi la table des symboles dans une bibliothèque partagée ou une DLL. Ceci est produit par l'éditeur de liens et sert à nommer toutes les fonctions et les éléments de données visibles pour les utilisateurs de la bibliothèque. Cela permet au système de créer des liens à 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" . link text

73
Ben Combee

En bref, il s’agit du mappage du nom auquel une variable est assignée à son adresse en mémoire, y compris les métadonnées telles que le type, la portée et la taille. Il est utilisé par le compilateur.

C'est en général, pas seulement C [++] *. Techniquement, cela n'inclut pas toujours l'adresse de mémoire directe. Cela dépend du langage, de la plate-forme, etc. ciblés par le compilateur.

22
Steve Landey

Sous Linux, vous pouvez utiliser la commande: 

nm [fichier objet]

pour lister la table des symboles de ce fichier objet.

13
hdn

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

8
Joe Schneider

Découvrez l'entrée Symbol Table wikipedia.

4
Allan Wind

La table des symboles est une structure de données importante créée et gérée 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
rashedcs