2009-12-26 15 views
14

Eventuali duplicati:
C programming : How does free know how much to free?In che modo free() conosce la quantità di memoria da distribuire?

Durante la programmazione in C, io spesso uso malloc() per allocare la memoria e free() per rilasciarla:

MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects); 
/** Do stuff **/ 
free(objArr); 

Come si fa free() sapere quanta memoria deallocare? malloc() crea una tabella da qualche parte per ricordare i puntatori e la quantità di memoria a cui puntava ciascun puntatore?

Se questo è il caso, sarà free() fallire se rinominare il puntatore? es .:

MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects); 
MyObject* newPtr= objArr; 
free(newPtr); /** Does this fail? **/ 

Cosa succede se incrementare il puntatore e poi corro free()? ad esempio:

MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects); 
newPtr++; 
free(newPtr); /** What happens now? **/ 

Disabilita un ulteriore blocco di memoria appena fuori dalla fine dell'array originale?

+3

Duplicato di http://stackoverflow.com/questions/1518711/c-programming-how-does-free-know-how-much-to-free – codaddict

risposta

19

Il modo più comune è che memorizza alcune informazioni immediatamente prima che l'indirizzo ritorni a voi. Quindi se malloc restituisce l'indirizzo 0x1004, internamente, malloc metterà da parte la memoria iniziata a 0x0FFC e memorizzerà varie informazioni come la dimensione da qualche parte nella memoria tra 0xFFC - 0x1003 ma l'applicazione verrà informata che l'allocazione inizia da 0x1004.

L'unica cosa che conta liberare è ottenere lo stesso identico indirizzo di quello restituito da malloc.

Problemi correlati