C/Gestione della memoria: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Annullate le modifiche di 79.61.187.216 (discussione), riportata alla versione precedente di 185.30.46.154 |
|||
Riga 7:
Ovviamente, per comprendere i meccanismi di gestione della memoria, è necessario conoscere l'organizzazione della stessa.
== La memoria: lo stack e lo heap ==
Possiamo immaginare la memoria divisa in due settori (detti '''segmenti'''): lo '''stack''' e lo '''heap'''. Lo stack è la memoria "fissa", che non cambia nel corso dell'esecuzione del programma, al contrario del segmento heap, che è la memoria cosiddetta "dinamica", le cui dimensioni possono variare durante l'esecuzione dell'applicazione.
Line 30 ⟶ 28:
Il valore restituito da queste funzioni è di tipo void * cioè una specie di puntatore neutro, indipendente dal tipo di dati da utilizzare. Per questo, in linea di principio, prima di assegnare a un puntatore il risultato dell'esecuzione di queste funzioni di allocazione, è opportuno eseguire un cast (conversione) al tipo di dato desiderato.
<source lang="c">
Line 54 ⟶ 51:
pi = malloc (sizeof (int));
...
La memoria allocata dinamicamente deve essere liberata in modo esplicito quando non serve più. Per questo si utilizza la funzione '''free()''' che richiede semplicemente il puntatore alla memoria precedentemente allocata e non restituisce alcunché.
'''void
È necessario evitare di deallocare più di una volta la stessa area di memoria, perché ciò potrebbe provocare effetti imprevedibili.
Line 83 ⟶ 80:
Lo standard prevede una funzione ulteriore, per la riallocazione di memoria: '''realloc()'''. Questa funzione si usa per ridefinire l'area di memoria con una dimensione differente (proprio in virtù del fatto che stiamo usando la memoria "dinamica):
'''void *
In pratica, la riallocazione deve rendere disponibili gli stessi contenuti già utilizzati, salvo la possibilità che questi siano stati ridotti nella parte terminale. Se invece la dimensione richiesta nella riallocazione è maggiore di quella precedente, lo spazio aggiunto può contenere dati casuali
[[Categoria:C|Gestione della memoria]]
|