Qu'est-ce qu'une table de symboles?
-
09-06-2019 - |
Question
Quelqu'un peut-il décrire ce qu'est une table de symboles dans le contexte de C et C ++?
La solution
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 place 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 tous les éléments de données visibles pour les utilisateurs de la bibliothèque. Cela permet au système de créer des liens au moment de 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 souhaitez en savoir plus, je vous suggère l'excellent livre de John Levine intitulé "Linkers and Loaders".
Autres conseils
En bref, il s’agit du mappage du nom que vous attribuez à une variable avec 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.
Sous Linux, vous pouvez utiliser la commande suivante:
nm [fichier objet]
pour lister la table des symboles de ce fichier objet.
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 des symboles peut être utilisée pour déterminer où se trouveront les variables ou fonctions dans la mémoire.
Découvrez l'entrée Table des symboles .
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.