91 votes

Qu'est-ce qu'un tableau de symboles ?

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

91voto

Ben Combee Points 7193

Il y a deux significations communes et liées des tableaux de symboles ici.

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. Ce fichier contient une collection de code exécutable et de données que l'éditeur de liens peut traiter pour en faire une application fonctionnelle ou une bibliothèque partagée. Le fichier objet contient une structure de données appelée table de symboles qui fait correspondre les différents éléments du fichier objet à des noms que l'éditeur de liens peut comprendre. Si vous appelez une fonction dans 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 de remplacement 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 de tous les fichiers objet qu'il traite et d'y coller l'emplacement final.

Ensuite, il y a aussi la table des symboles dans une bibliothèque partagée ou une DLL. Elle est produite par l'éditeur de liens et sert à nommer toutes les fonctions et les éléments de données qui sont visibles pour les utilisateurs de la bibliothèque. Cela permet au système d'effectuer la liaison au moment de l'exécution, en résolvant les références ouvertes à ces noms à l'endroit où la bibliothèque est chargée en mémoire.

Si vous voulez en savoir plus, je vous conseille l'excellent livre de John Levine intitulé "Linkers and Loaders". texte du lien

27voto

Steve Johnson Points 1673

En bref, il s'agit de la correspondance entre le nom que vous attribuez à une variable et son adresse en mémoire, y compris les métadonnées comme 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 mémoire directe. Cela dépend du langage, de la plate-forme, etc. que le compilateur cible.

13voto

tsubasa Points 3409

Sous Linux, vous pouvez utiliser la commande :

nm [fichier d'objets]

pour lister la table des symboles de ce fichier objet. A partir de cette impression, vous pouvez alors déchiffrer les symboles de l'éditeur de liens en usage à partir de leur noms déformés .

8voto

Joe Schneider Points 3563

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 l'emplacement des variables ou des fonctions dans la mémoire.

3voto

Allan Wind Points 1133

Consultez le Tableau des symboles entrée wikipédia.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X