For faster navigation, this Iframe is preloading the Wikiwand page for Chunk (informatica).

Chunk (informatica)

Da Wikipedia, l'enciclopedia libera.

Un chunk è un blocco di memoria residente nello heap.

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

[modifica | modifica wikitesto]

Lo schema per la rappresentazione di un singolo chunk già allocato in memoria è il seguente:

     Header: [prev_size + size]
     Dati:   [user_data]
  • 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)

[modifica | modifica wikitesto]

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]
  • FD pointer: puntatore al chunk libero seguente
  • BK pointer: puntatore al chunk libero precedente

Operazioni coi chunk

[modifica | modifica wikitesto]

Nel linguaggio di programmazione C la gestione dei chunk avviene per mezzo di 2 funzioni fondamentali:

  • malloc() allocazione chunk
  • free() deallocazione chunk

Allocazione (malloc)

[modifica | modifica wikitesto]

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)

[modifica | modifica wikitesto]

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

[modifica | modifica wikitesto]
  Portale Informatica: accedi alle voci di Wikipedia che trattano di Informatica
{{bottomLinkPreText}} {{bottomLinkText}}
Chunk (informatica)
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?