Variablennamen müssen nicht gespeichert werden! Der Compiler kann sie vollständig loswerden. Stellen Sie sich vor, wenn der Compiler sehr clever ist, kann er das gesamte Programm auf diese reduzieren:
int main(){
return 0;
}
Beachten Sie, dass die Wirkung dieses Programms ist es genau das gleiche wie das Original, und jetzt gibt es keine Variablen überhaupt nicht! Keine Notwendigkeit, sie jetzt zu benennen, oder?
Auch wenn die Variablen in Ihrem Code tatsächlich verwendet wurden, sind ihre Namen nur eine bequeme Schreibweise, wenn Sie das Programm schreiben, aber sie werden vom Prozessor nicht benötigt, wenn sie Ihren Code ausführen. Soweit ein Mikroprozessor betrifft, eine Funktion wie folgt aus:
int foo(int x, int y) {
int z = x + y;
return z * 2;
}
könnte in kompilierten Code zur Folge haben, dass dies der Fall ist, in irgendeiner hypothetischen einfachen Befehlssatzarchitektur (ISA):
ADD # consumes top two values on stack (x and y), pushes result (z)
PUSH 2 # pushes 2 on stack
MULT # consumes top two values on stack (z and 2), pushes result
RET
Je länger Geschichte ist, dass Variablennamen manchmal für Debugging-Zwecke gespeichert werden. Wenn Sie zum Beispiel GCC verwenden, können Sie die -g
Option übergeben, um eine "Symboltabelle" auszugeben, die Dinge wie Variablennamen zum Debuggen enthält. Aber es ist nicht notwendig, einfach ein Programm auszuführen, und es ist nicht durch den Sprachstandard abgedeckt - es ist ein Implementierungsmerkmal, das sich je nach Plattform unterscheidet.
Eine Symboltabelle ist ein Compiletime-Konstrukt, es spiegelt keine Laufzeiteigenschaften wider. Map-Dateien und Debug-Informationen sind Quellen verfügbar, um eine Vorstellung von Symbolnamen für Orte zu bekommen, aber sie sollten nicht aus dem Programm heraus verwendet werden. RTTI und andere Formen von Introspektion sind, aber C hat keine Form davon –