Ragazzi corregetemi se sbaglio, le varriabili in C si appoggiano sullo stack mentre i puntatori sull'heap?
Ragazzi corregetemi se sbaglio, le varriabili in C si appoggiano sullo stack mentre i puntatori sull'heap?
il puntatore è una variabile anch'essa memorizzata staticamente.
La memoria puntata se allocata dinamicamente si trova nella "heap".
Quindi riepilogando tutte le variabili vengono inserite nello stack. L'allocazione dei puntatori invece nell'heap, giusto?
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):
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.codice:int a; int * ptr=&a;
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.
Amaro C++, il gusto pieno dell'undefined behavior.