C Gestione della memoria

Da Andreabont's Wiki.

Il C permette di allorare la memoria in modo dinamico tramite delle funzioni della libreria standard. (stdlib.h)

Libreria standard (malloc)

Tramite la chiamata malloc() è possibile allocare un array contiguo di un numero specificato di byte nell'heap, ottenedo un puntatore allo zona allorata (o NULL in caso di errore). La memoria allocata non viene automaticamente inizializzata. Da notare che è buona pratica utilizzare sizeof(tipo) per ottenere la lunghezza in byte occupata dal tipo specificato e potrela moltiplicare per il numero di tipi che si vogliono salvare. Nel nostro esempio vogliamo salvare 10 valori interi.

int *ptr = malloc(10 * sizeof(int));

Calloc

Con calloc() è possibile allocare e inizializzare a 0 la memoria allo stesso tempo. Per farlo è necessario specificare separatamente la quantità di elementi da allocare e la loro dimensione. Come nell'esempio precedente allocheremo un vettore di 10 interi.

int *ptr = calloc(10, sizeof(int));

Realloc

Data una zona di memoria già allocata, può essere necessario modificarne le dimensioni, sia aumentandola che diminuendola. In caso di diminuzione questa viene sempre fatta sul posto, troncando eventuali dati precedenti che sforano la nuova dimensione, per l'aumento questo viene fatto sul posto se possibile, se non possibile (il vettore deve sempre essere contiguo) allora verrà inizializzata una nuova porzione di memoria da un'altra parte e verranno copiati i dati in questa nuova locazione, deallocando automaticamente la vecchia zona di memoria. Nel nostro esempio vogliamo allargare il vettore per fargli contenere 20 valori interi.

int *ptr = realloc(ptr, 20 * sizeof(int));

Deallocare

Una volta che la memoria non è più utile va deallocata in modo esplicito (a meno di non usare un garbage collector)

free(ptr);