Question

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

Était-ce utile?

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".

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top