Non è necessario memorizzare i nomi delle variabili! Il compilatore può sbarazzarsi di loro interamente. Immaginate, se il compilatore è abbastanza intelligente, può ridurre l'intero programma a questo:
int main(){
return 0;
}
Nota che l'effetto di questo programma è esattamente lo stesso del vostro originale, e ora non ci sono variabili a tutti! Non c'è bisogno di nominarli ora, vero?
Anche se le variabili nel codice sono state effettivamente utilizzate, i loro nomi sono puramente una notazione conveniente quando si scrive il programma, ma non sono necessari dal processore quando esegue il codice. Per quanto riguarda un microprocessore è interessato, una funzione come questa:
int foo(int x, int y) {
int z = x + y;
return z * 2;
}
Potrebbe risultare in codice compilato che fa questo, in qualche ipotetica semplice set di istruzioni (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
La storia più è che i nomi delle variabili sono a volte memorizzati per scopi di debug. Ad esempio, se stai utilizzando GCC, puoi passare l'opzione -g
per emettere una "tabella dei simboli" che contiene cose come i nomi delle variabili per il debug. Ma non è necessario semplicemente per eseguire un programma, e non è coperto dallo standard di lingua - è una funzionalità di implementazione che differisce dalla piattaforma.
fonte
2015-12-20 14:59:57
Una tabella dei simboli è un costrutto compiletime, non riflette le proprietà di runtime. I file mappa e le informazioni di debug sono fonti disponibili per avere un'idea dei nomi dei simboli per le posizioni, ma non sono stati pensati per essere utilizzati all'interno del programma. RTTI e altre forme di introspezione sono, ma C non ne ha alcuna forma –