2009-12-26 17 views
14

Mögliche Duplizieren:
C programming : How does free know how much to free?Wie kann free() wissen, wie viel Speicher freigegeben wird?

Wenn in C-Programmierung, ich malloc() oft verwenden Speicher zuzuweisen und free() um sie zu lösen:

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

Wie weiß free(), wie viel Speicher entziehen? Erzeugt malloc() eine Tabelle irgendwo, um sich Zeiger zu merken und wie viel Speicher jeder Zeiger zeigte?

Wenn das der Fall ist, wird free() fehlschlagen, wenn ich den Zeiger umbenenne? z.B .:

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

Was passiert, wenn ich den Zeiger erhöht und dann free() laufen? Beispiel:

Wird es ein zusätzliches Stück Speicher gerade aus dem Ende des ursprünglichen Arrays freigeben?

+3

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

Antwort

19

Die gebräuchlichste Methode ist, dass einige Informationen unmittelbar vor der Adresse gespeichert werden, die sie an Sie zurückgibt. Wenn malloc intern die Adresse 0x1004 zurückgibt, hat malloc intern den bei 0x0FFC gestarteten Speicher abgelegt und speichert verschiedene Informationen wie die Größe irgendwo im Speicher zwischen 0xFFC - 0x1003, aber der Anwendung wird mitgeteilt, dass die Zuweisung bei 0x1004 beginnt.

Die einzige Sache, die kostenlos ist, ist genau die gleiche Adresse zu bekommen wie malloc zurück.

Verwandte Themen