Ciao, sto realizzando un allocatore di memoria. Quando viene richiesta l'allocazione di un nuovo blocco, il programma consulta una lista nella quale sono descritte le partizioni occupate per individuare una partizione libera nella quale e' possibile allocare il blocco. Nel caso in cui lo spazio libero non sia contiguo viene effettuata la compattazione. La funzione che effettua la compattazione e' la seguente:
codice:
void compactH(heap *h) {
elMap *m;
byte *dest;
if (h != NULL) {
m = h->head;
fprintf(stderr, "BASE: %p\n", (void *)h->base);
dest = h->base;
while (m != NULL) {
h->handle[m->indHand] = memmove(dest, m->start, m->size);
fprintf(stderr, "Inizio: %p\n", (void *) h->handle[m->indHand]);
m->start = h->handle[m->indHand];
dest = m->start + m->size;
fprintf(stderr, "Prossima: %p\n", (void *) dest);
m = m->next;
}
}
}
è il puntatore al primo elemento della lista delle partizioni occupate e
è il puntatore al primo byte del buffer di memoria. La lista delle partizioni occupate è ordinata in ordine crescente di indirizzo del primo byte (
) e
è la dimensione della partizione occupata.
Il problema che ho è che dopo la compattazione il contenuto delle partizioni che erano già presenti è incosistenete, sapete mica dirmi cos'è che sbaglio?
Grazie