Chunk (informatica)Un chunk è un blocco di memoria residente nello heap. ComposizioneOgni chunk è composto da un header (o intestazione) di dimensione costante 8 byte seguito da uno spazio di memoria variabile, la cui dimensione minima è la stessa utilizzata per l'intestazione e cresce seguendo l'ordine dei suoi multipli:
Chunk allocatoLo schema per la rappresentazione di un singolo chunk già allocato in memoria è il seguente: Header: [prev_size + size] Dati: [user_data]
Chunk libero (non-allocato)Lo schema per la rappresentazione di un singolo chunk libero in memoria è il seguente: Le funzioni di prev_size e size non cambiano, fatta eccezione per user_data che invece potrà assumere un valore di lunghezza pari a 0 byte. Header: [prev_size + size + FD pointer + BK pointer] Dati: [user_data]
Operazioni coi chunkNel linguaggio di programmazione C la gestione dei chunk avviene per mezzo di 2 funzioni fondamentali: Allocazione (malloc)Per allocazione si intende l'atto di riservare dello spazio in memoria, allo scopo di conservare in esso i dati essenziali per il corretto funzionamento del programma. Un esempio di porzione di codice per l'allocazione di un chunk con user_data uguale a 128 byte può essere il seguente: int main(void) { char *chunk = (char *)malloc(128); return 0; } Dobbiamo ricordare che per le regole della composizione di un chunk, il comando malloc(0) risulterà in un chunk di 16 byte (8 byte di intestazione + 8 byte minimi per user_data). Deallocazione (free)Per deallocazione si intende l'atto di liberare uno spazio in memoria precedentemente allocato, e renderlo dunque riutilizzabile per successive allocazioni. N.B: La mancata deallocazione di un chunk dopo il suo utilizzo è la prima causa dei memory leak int main(int argc, char **argv) { char *chunk = (char *)malloc(4*sizeof(char)); // allocazione strncpy(chunk, argv[1], 4); // utilizzo free(chunk); // deallocazione return 0; } Voci correlate |
Portal di Ensiklopedia Dunia