title: Chunk (informatica)
text: # Chunk (informatica)
  
  Un chunk è un blocco di memoria residente nello heap.
  
  ## Composizione
  
  Ogni 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:
  
  | Header | Dati | Dimensione Totale |
  | - | - | - |
  | 8 byte | 8 byte | 16 byte (dimensione minima assoluta) |
  | 8 byte | 16 byte | 24 byte |
  | 8 byte | 24 byte | 32 byte |
  
  ### Chunk allocato
  
  Lo schema per la rappresentazione di un singolo chunk già allocato in memoria è il seguente:
  
  * prev_size (4 byte): contiene informazioni relative al chunk libero che precede
  * size (4 byte): contiene la dimensione espressa in byte dell'intero chunk (header + dati)
  * user data (minimo 8 byte): area di memoria a disposizione dell'utente
  
  ### 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.
  
  * FD pointer: puntatore al chunk libero seguente
  * BK pointer: puntatore al chunk libero precedente
  
  ## Operazioni coi chunk
  
  Nel linguaggio di programmazione C la gestione dei chunk avviene per mezzo di 2 funzioni fondamentali:
  
  * malloc allocazione chunk
  * free deallocazione chunk
  
  ### 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:
  
  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
  
  