Nozioni di Stack e Heap

Con il termine Stack si intende l’area di memoria destinata a mantenere informazioni sulle funzioni. Lo Stack può essere a sua volta suddiviso in diverse aree di memoria:

  • una prima parte destinata a contenere le istruzioni eseguibili del programma stesso (code)
  • un’altra area destinata invece a contenere variabili globali, definite al di fuori delle funzioni
  • un’area che si occupa dell’allocazione dinamica di oggetti destinati a crescere indefinitivamente (come le reference type) definita HEAP: gli oggetti che vanno qui non hanno una dimensione definita.

Consideriamo un generico programma che parte dalla funzione main per poi andare al gestore evento button click che ha chiamato a sua volta una seconda funzione F(x) la quale ne ha chiamata una terza che indichiamo con G(x): tutte queste chiamate corrispondono ad altrettante zone di memoria riservate nello Stack per ogni funzione: ognuna di esse causa la creazione di un’area relativa alla singola funzione (quest’area
viene detta Stack Frame o Activation Record): nello Stack frame ci sono informazioni tra cui le variabili locali definite all’interno delle singole funzioni (value type), gli eventuali parametri che gli vengono passati e l’indirizzo di ritorno per quando la funzione termina. Supponiamo di essere passati in G(x) che ci riporta in F(x): tutti i dati di G vengono cancellati dallo Stack. Stessa cosa per F quando si ritorna nel Click e così via: possiamo riassumere questo funzionamento mediante l’acronimo LIFO (l’ultimo che entra è anche il primo che esce).
La dimensione dello Stack è pari ad un 1 GB per programmi a 32 bit e 4 GB per 64 bit ma se c’è un eccesso di chiamate si può avere un errore detto Stack Overflow.

Rispondi

Crea il tuo sito web gratuitamente su WordPress.com.Crea il tuo sito web.
Comincia gratuitamente