Sono confuso riguardo a heap
e free list
. Ho alcune domande e ho la mia comprensione di come funziona malloc in C. Per favore correggimi se sbaglio.Assegnazione memoria memoria e lastra
- La memoria heap è organizzata come un elenco collegato (elenco libero) di blocchi di dati ?
- C'è una differenza tra memoria heap e lista libera?
mia comprensione di allocazione di memoria (aperto per consolidamento): - Quando chiamiamo malloc, alloca memoria nell'heap, e lo fa scegliendo un blocco di dati di dimensione adatta dalla free list
, giusto?
Quando un certo blocco di memoria viene restituito da malloc, viene rimosso dalla lista libera e l'indirizzo fisico di quel blocco di memoria viene aggiornato nella tabella della pagina.
Quando la memoria è liberata utilizzando free()
, il blocco di dati viene inserito nuovamente nella lista libera e, possibilmente, per ridurre la frammentazione, congiuntamente al blocco adiacente, e il bit present
nella voce della tabella di pagina viene cancellato.
Quindi l'intero heap è una lista libera (elenco collegato di blocchi liberi) + blocchi dati allocati.
È un quadro completo dell'allocazione dello spazio di archiviazione?
EDIT: Da Linux Kernel Development (Robert Love) capitolo sulla gestione della memoria, Slab allocazione
"Un elenco libero contiene un blocco di disposizione, già stanziati, i dati strutture Quando il codice richiede un. nuova istanza di una struttura dati, è in grado di afferrare una delle strutture dall'elenco libero anziché allocare la quantità sufficiente di memoria e configurarlo per la struttura dati. Successivamente, quando la struttura dati non è più necessaria, viene restituito a la lista gratuita invece di dealloca ted. In questo senso, la lista libera agisce come una cache oggetto, memorizzando una tipo usato frequentemente di oggetto."
Free-list è menzionato come 'blocco di disposizione, la struttura dati assegnato'.
- Come è allocato, quando si trova in un free-list?
- E come sta tornando un blocco di memoria di lista libera _ non _ lo stesso di deallocare quel blocco?
- Come è allocazione lastra diverso da allocazione dello storage
Si sta dicendo: "malloc() assegna porzioni di dimensioni variabili del segmento di dati del programma". Non è il mucchio a cui ti stai riferendo? L'heap è una parte del segmento di dati? Anche se erano diversi ... –
L'heap è una struttura di dati situata nel segmento di dati. Sono i dati contabili che tiene traccia di quali porzioni del segmento di dati sono in uso e quali sono disponibili. Per analogia, pensa al ruolo che un filesystem svolge su un disco. – Wyzard
Sharat: Penso che tu stia pensando troppo a tutto - scusa! –