Ich las Effective C++, 3. Auflage und in Punkt 2 (bevorzugen const, Aufzählungen und inlines zu #defines) erwähnt Scott Meyers die Symboltabelle: er erklärt dass #defines
möglicherweise nicht in der Symboltabelle erscheint.Symboltabelle durch die C++ erstellt Compiler
Basierend auf der Antwort here, ein bisschen von der reading davon vorgeschlagen, und der Wikipedia Artikel möchte ich die Symboltabelle wie folgt definieren: da nur der Compiler Objektdateien für jede Übersetzungseinheit schafft, müssen wir noch einen Weg Referenzsymbole zwischen den Übersetzungseinheiten. Dazu wird eine Tabelle verwendet, die für jede Objektdatei erstellt wird, so dass Symbole zu einem späteren Zeitpunkt definiert werden können - vom Linker, wenn die ausführbare Datei/Bibliothek aus den Objektdateien erstellt wird. Beim Verknüpfen werden Symbole durch den Linker mit ihren entsprechenden Speicheradressen ersetzt.
Hier ist, was Ich mag gerne wissen:
- meine Interpretation Ist oben richtig?
- Nach der Verknüpfung, nachdem die Speicheradressen aufgelöst wurden, glaube ich nicht, dass Symboltabellen erforderlich sind? Das heißt, ich denke, dass die Symboltabelle nicht in der ausführbaren Datei/Bibliothek verfügbar sein wird; Ist das korrekt?
- Ich vermute, dass die Symboltabelle auch für andere Compiler-Aufgaben nützlich ist? Etwas wie das Identifizieren von Namenskonflikten vielleicht?
- Die oben beschriebene Symboltabelle ist nicht identisch mit der export table. Im Kontext von Visual C++ definiert die Exporttabelle die Symbole, die außerhalb der Bibliothek explizit als sichtbar deklariert sind. Ich nehme an, in gewissem Sinne ist dies eine Tabelle von Symbolen - aber nicht im Zusammenhang mit der Symboltabelle, auf die Scott sich bezieht.
- Gibt es noch etwas Interessantes über die Symboltabelle? Das heißt, gibt es zusätzliche Erkenntnisse über Symboltabellen, die ich haben sollte?
Vielen Dank für Ihre Zeit und Ihren Beitrag.