On Sunday, April 21, 2013 9:53:40 PM UTC+2, NERO23 wrote:
> Alcuni chiarimenti in merito alla memoria heap e stack...
> Ipotizziamo di avere un programmino scritto in C il cui codice è
> composto dal tradizionale main() e da due funzioni: A() e B().
> All'interno della funzione A() è previsto la variabile int a e nella
> funzione B() la variabile int locale b.
>
> In fase di secuzione del programma, il sistema operativo alloca
> automaticamente lo spazio per le due variabili, a e b, nello stack anche
> se le due funzioni non sono state chiamate dal main?
>
Come primissima cosa, se una funzione non è chiamata dal probabilmente il
compilatore la scarta, e non va a finire nell'eseguibile finale.
Detto questo, lo stack è gestito diversamente da ogni sistema operativo, per
cui adesso prendo in considerazione solo il sistema "classico" di stack, così
com'è implementato sugli *nix o win.
Lo stack è un'area di memoria allocata dal sistema operativo ogni volta che
parte un programma, la cui dimensione è o fissa o decisa in base ad un valore
che si trova nell'eseguibile stesso. Lo stack quindi è sempre allocato, e si
riempie.. come uno stack (si fa push/pop di valori e visivamente è come
se si riempisse "al contrario", dall'alto al basso).
Ogni volta che chiami una funzione, il contesto necessario e le varabili
locali sono messe sullo stack (un push), che si riempie un pochino di più:
all'uscita della funzione, questa sottrarrà allo stack quello che ha messo
all'inizio, lasciandolo nella stessa situazione di quando è stata chiamata.
Spero sia un po' più chiaro ;)
Ciao!