Frage Was ist eine Symboltabelle?


Kann jemand beschreiben, was eine Symboltabelle im Kontext von C und C ++ ist?


76
2017-09-16 03:14


Ursprung


Antworten:


Es gibt zwei allgemeine und verwandte Bedeutungen von Symboltabellen.

Zuerst 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. Dies enthält eine Sammlung von ausführbarem Code und Daten, die der Linker in eine funktionierende Anwendung oder eine gemeinsam genutzte Bibliothek verarbeiten kann. Die Objektdatei hat eine Datenstruktur, die als Symboltabelle bezeichnet wird und die verschiedenen Elemente in der Objektdatei den Namen zuordnet, die der Linker verstehen kann. Wenn Sie eine Funktion aus Ihrem Code aufrufen, fügt der Compiler die letzte Adresse der Routine nicht in die Objektdatei ein. Stattdessen fügt es einen Platzhalterwert in den Code ein und fügt eine Notiz hinzu, die den Linker anweist, die Referenz in den verschiedenen Symboltabellen aus allen Objektdateien, die er verarbeitet, nachzuschlagen und den endgültigen Ort dort festzuhalten.

Zweitens gibt es auch die Symboltabelle in einer gemeinsam genutzten Bibliothek oder DLL. Dies wird vom Linker erzeugt und dient dazu, alle Funktionen und Datenelemente zu benennen, die für Benutzer der Bibliothek sichtbar sind. Dadurch kann das System eine Laufzeitverknüpfung durchführen und offene Referenzen auf diese Namen auf den Speicherort auflösen, an dem die Bibliothek im Speicher geladen ist.

Wenn Sie mehr erfahren wollen, empfehle ich John Levines exzellentes Buch "Linkers and Loaders".Link Text


70
2017-09-16 03:28



Kurz gesagt, es ist die Zuordnung des Namens, den Sie einer Variablen zu 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 beinhaltet es nicht immer die direkte Speicheradresse. Dies hängt davon ab, auf welche Sprache, Plattform usw. der Compiler zielt.


22
2017-09-16 03:16



Unter Linux können Sie den folgenden Befehl verwenden:

nm [Objektdatei]

um die Symboltabelle dieser Objektdatei aufzulisten.


13
2017-07-28 16:44



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.


8
2017-09-16 03:26



Besuche die Symboltabelle Wikipedia-Eintrag.


4
2017-09-16 03:17



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.


0
2017-11-01 13:41