Ich bin auf einer 32bit alten Maschine. Und wollen lernen, wie es tief geht. Die Heap-Implementierung auf diesem System ist wirklich alt. Ich denke, es verwendet einen älteren malloc-Algorithmus. Jetzt ist meine Frage. Das ist mein Programm.Gibt es eine minimale Heap Größe
#include <stdio.h>
#include <stdlib.h>
struct fp {
int (*fpd)();
};
int main()
{
int *ptr;
malloc(sizeof(struct fp));
printf("Size:%d\n",sizeof(struct fp));
return 0;
}
Wenn ich das Programm die Ausgabe laufen ist 4. also der Heap Chunkgröße 4Byte Header + 4 Byte groß sein sollte + 4 Byte (sizeof struct) so sollte der Haufen 12 Bytes gleich zu 0xc
Aber wenn ich auf den Heap in gdb schaue, sagt es mir die Größe eines Stücks von 0x10 entspricht 16 Bytes, aber woher sind die anderen 4 Bytes. Das verwirrt mich!
Oder ist es möglich, dass eine minimale Chunksize existiert, die 0x10 ist?
'malloc' Implementierungsdetails sind in keiner Norm geregelt. Öffnen Sie den Quellcode und schauen Sie dort nach, ob es Ihnen wirklich wichtig ist. –
Es ist * absolut * möglich, dass 'malloc()' Speicher in 16-Byte- (oder größeren) Chunks erhält. In diesem Fall könnte es durchaus sein, dass mehr Overhead vorhanden ist, als Sie vermuten, oder einfach, dass mehr Speicherplatz vom Betriebssystem bezogen wurde, als Sie angefordert haben. Nicht, dass ein solcher zusätzlicher Speicherplatz sicher zu verwenden wäre - "malloc()" könnte es möglicherweise verwenden, um einige zukünftige Anforderungen zu erfüllen, ohne zusätzlichen Speicher vom Betriebssystem zu erhalten. –
Wie bekomme ich meinen malloc Quellcode? @Eugene Sh. –