PDA

Visualizza la versione completa : dove vengono salvate le variabili in C


sys14
13-09-2010, 14:16
Ragazzi corregetemi se sbaglio, le varriabili in C si appoggiano sullo stack mentre i puntatori sull'heap?

sebaldar
13-09-2010, 14:45
il puntatore è una variabile anch'essa memorizzata staticamente.
La memoria puntata se allocata dinamicamente si trova nella "heap".

sys14
13-09-2010, 15:37
Quindi riepilogando tutte le variabili vengono inserite nello stack. L'allocazione dei puntatori invece nell'heap, giusto?

MItaly
13-09-2010, 15:53
La tua affermazione è ancora quantomeno imprecisa: un puntatore può benissimo puntare ad una variabile che si trova sullo stack: una roba di questo tipo è perfettamente lecita (nonché molto usata):

int a;
int * ptr=&a;
In linea generale, la questione funziona così: le variabili locali non statiche (puntatori compresi, che sono normalissime variabili) sono allocate sullo stack, così che all'uscita dallo scope corrente (=modifica dello stack pointer) vengono "deallocate" automaticamente.
Le variabili globali e le variabili locali static (che dal punto di vista del compilatore sono praticamente la stessa roba) sono situate in un'area di memoria apposita, allocata all'avvio del programma e deallocata alla fine; se si tratta di variabili inizializzate spesso essa è un'area del file eseguibile mappata in memoria in modalità copy-on-write.
La memoria allocata dinamicamente (che c'entra ben poco con i puntatori, usati semplicemente per poterci accedere) è solitamente allocata nell'heap.

Per inciso, per quanto concerne lo standard C lo stack e l'heap potrebbero benissimo non esistere, sono semplicemente il modo più comunemente usato di implementare la semantica delle variabili locali e dell'allocazione dinamica.

Loading