Quelqu'un peut-il décrire ce qu'est une table de symboles dans le contexte de C et C ++?
Réponses:
Il existe ici deux significations communes et liées des tables de symboles.
Tout d'abord, il y a la table des symboles dans vos fichiers objets. Habituellement, un compilateur C ou C ++ compile un seul fichier source dans 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 dans une application de travail ou une bibliothèque partagée. Le fichier objet contient 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 objets qu'il 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 éléments de données visibles par les utilisateurs de la bibliothèque. Cela permet au système d'effectuer des liaisons au moment de l'exécution, en résolvant les références ouvertes à ces noms vers l'emplacement où la bibliothèque est chargée en mémoire.
Si vous voulez en savoir plus, je vous suggère l'excellent livre de John Levine "Linkers and Loaders". texte du lien
En bref, c'est le mappage du nom que vous attribuez à une variable à son adresse en mémoire, y compris des 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, il n'inclut pas toujours l'adresse mémoire directe. Cela dépend de la langue, de la plate-forme, etc. ciblée par le compilateur.
Sous Linux, vous pouvez utiliser la commande:
nm [fichier objet]
pour lister la table des symboles de ce fichier objet. À partir de cette impression, vous pouvez ensuite déchiffrer les symboles de l'éditeur de liens en cours d'utilisation à partir de leur noms mutilés .
Le tableau 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ù dans la mémoire les variables ou les fonctions seront situées.
Consultez l' entrée wikipedia Table des symboles.
La table de symboles est une structure de données importante créée et maintenue par des compilateurs afin de stocker des informations sur l'occurrence de diverses entités telles que des noms de variables, des noms de fonctions, des objets, des classes, des interfaces, etc.