Antworten:
Hier gibt es zwei gemeinsame und verwandte Bedeutungen von Symboltabellen.
Erstens gibt es die Symboltabelle in Ihren Objektdateien. Normalerweise kompiliert ein C- oder C ++ - Compiler eine einzelne Quelldatei in eine Objektdatei mit der Erweiterung .obj oder .o. Diese enthält eine Sammlung von ausführbarem Code und Daten, die der Linker in eine funktionierende Anwendung oder gemeinsam genutzte Bibliothek verarbeiten kann. Die Objektdatei enthält eine Datenstruktur, die als Symboltabelle bezeichnet wird und die verschiedenen Elemente in der Objektdatei Namen zuordnet, die der Linker verstehen kann. Wenn Sie eine Funktion aus Ihrem Code aufrufen, fügt der Compiler die endgültige Adresse der Routine nicht in die Objektdatei ein. Stattdessen wird ein Platzhalterwert in den Code eingefügt und eine Notiz hinzugefügt, die den Linker anweist, die Referenz in den verschiedenen Symboltabellen aus allen von ihm verarbeiteten Objektdateien nachzuschlagen und den endgültigen Speicherort dort festzuhalten.
Zweitens gibt es auch die Symboltabelle in einer gemeinsam genutzten Bibliothek oder DLL. Dies wird vom Linker erstellt und dient dazu, alle Funktionen und Datenelemente zu benennen, die für Benutzer der Bibliothek sichtbar sind. Auf diese Weise kann das System zur Laufzeit eine Verknüpfung herstellen und offene Verweise auf diese Namen an dem Ort auflösen, an dem die Bibliothek in den Speicher geladen wird.
Wenn Sie mehr erfahren möchten, empfehle ich John Levines ausgezeichnetes Buch "Linkers and Loaders". Link Text
Kurz gesagt handelt es sich um die Zuordnung des Namens, den Sie seiner Adresse im Speicher zuweisen, einschließlich Metadaten wie Typ, Bereich und Größe. Es wird vom Compiler verwendet.
Das ist im Allgemeinen nicht nur C [++] *. Technisch gesehen enthält es nicht immer die direkte Speicheradresse. Dies hängt davon ab, auf welche Sprache, Plattform usw. der Compiler abzielt.
Unter Linux können Sie den folgenden Befehl verwenden:
nm [Objektdatei]
um die Symboltabelle dieser Objektdatei aufzulisten. Aus diesem Ausdruck können Sie dann die verwendeten Linkersymbole aus ihren verstümmelten Namen entschlüsseln .
Die Symboltabelle ist die Liste der "Symbole" in einem Programm / einer Einheit. Symbole sind meistens die Namen von Variablen oder Funktionen. Die Symboltabelle kann verwendet werden, um zu bestimmen, wo sich Variablen oder Funktionen im Speicher befinden.
Schauen Sie sich den Wikipedia-Eintrag Symbol Table an .
Die Symboltabelle ist eine wichtige Datenstruktur, die von Compilern erstellt und verwaltet wird, um Informationen über das Auftreten verschiedener Entitäten wie Variablennamen, Funktionsnamen, Objekte, Klassen, Schnittstellen usw. zu speichern.