Qualcuno può descrivere cos'è una tabella dei simboli nel contesto di C e C ++?
Risposte:
Ci sono due significati comuni e correlati delle tabelle dei simboli qui.
Innanzitutto, c'è la tabella dei simboli nei file oggetto. Di solito, un compilatore C o C ++ compila un singolo file sorgente in un file oggetto con estensione .obj o .o. Contiene una raccolta di codice eseguibile e dati che il linker può elaborare in un'applicazione funzionante o una libreria condivisa. Il file oggetto ha una struttura di dati chiamata tabella dei simboli che associa i diversi elementi nel file oggetto a nomi comprensibili dal linker. Se chiami una funzione dal tuo codice, il compilatore non inserisce l'indirizzo finale della routine nel file oggetto. Invece, inserisce un valore segnaposto nel codice e aggiunge una nota che dice al linker di cercare il riferimento nelle varie tabelle di simboli da tutti i file oggetto che sta elaborando e di attaccare la posizione finale lì.
In secondo luogo, c'è anche la tabella dei simboli in una libreria condivisa o DLL. Questo è prodotto dal linker e serve a nominare tutte le funzioni e gli elementi di dati che sono visibili agli utenti della libreria. Ciò consente al sistema di eseguire il collegamento in fase di esecuzione, risolvendo i riferimenti aperti a quei nomi nella posizione in cui la libreria è caricata in memoria.
Se vuoi saperne di più, ti consiglio l'eccellente libro di John Levine "Linkers and Loaders". testo del collegamento
In breve, è la mappatura del nome che assegni a una variabile al suo indirizzo in memoria, inclusi metadati come tipo, ambito e dimensione. Viene utilizzato dal compilatore.
Questo è in generale, non solo C [++] *. Tecnicamente, non include sempre l'indirizzo di memoria diretto. Dipende dalla lingua, dalla piattaforma, ecc. Il compilatore sta prendendo di mira.
In Linux, puoi usare il comando:
nm [file oggetto]
per elencare la tabella dei simboli di quel file oggetto. Da questa stampa, puoi quindi decifrare i simboli del linker in uso dai loro nomi alterati .
La tabella dei simboli è l'elenco dei "simboli" in un programma / unità. I simboli sono spesso i nomi di variabili o funzioni. La tabella dei simboli può essere utilizzata per determinare dove verranno collocate le variabili o le funzioni nella memoria.
Controlla la voce di wikipedia Tabella dei simboli .
La tabella dei simboli è un'importante struttura di dati creata e mantenuta dai compilatori al fine di memorizzare le informazioni sull'occorrenza di varie entità come nomi di variabili, nomi di funzioni, oggetti, classi, interfacce, ecc.