it-swarm-eu.dev

Was ist eine Symboltabelle?

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

78
jdt141

Es gibt hier zwei allgemeine und verwandte Bedeutung von Symboltabellen.

Zunächst 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 eine gemeinsam genutzte Bibliothek verarbeiten kann. Die Objektdatei hat eine Datenstruktur, die als Symboltabelle bezeichnet wird. Sie ordnet die verschiedenen Elemente in der Objektdatei den Namen zu, 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 fügt sie einen Platzhalterwert in den Code ein und fügt eine Notiz hinzu, die den Linker anweist, die Referenz in den verschiedenen Symboltabellen aller Objektdateien, die er verarbeitet, nachzuschlagen, und den endgültigen Speicherort dort zu speichern.

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

Wenn Sie mehr erfahren möchten, empfehle ich John Levines hervorragendes Buch "Linkers and Loaders" . link text

73
Ben Combee

In Kürze ist es die Zuordnung des Namens, den Sie einer 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 enthält es nicht immer eine direkte Speicheradresse. Es hängt davon ab, auf welche Sprache, Plattform usw. der Compiler abzielt.

22
Steve Landey

In Linux können Sie den Befehl verwenden: 

nm [Objektdatei]

um die Symboltabelle dieser Objektdatei aufzulisten.

13
hdn

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
Joe Schneider

Schauen Sie sich den Symbol Table Wikipedia-Eintrag an.

4
Allan Wind

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
rashedcs