我在一臺32位的舊機器上。並想深入瞭解事情進展情況。這個系統上的堆實現真的很老,我認爲它使用了一個老的malloc算法。 現在我的問題是。 這是我的程序。有沒有最小的堆大小
#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;
}
如果我運行PROGRAMM輸出爲4。 所以堆塊大小應該是4字節報頭+ 4字節大小+ 4字節(的sizeof結構) 因此堆應爲12個字節等於位於0xC
但是,如果我看一下gdb中的堆,它會告訴我一個0x10 塊的大小等於16bytes,但是其他4個字節在哪裏。這讓我很困惑!
或者是否有可能存在0x10的最小塊大小?
'malloc'的實現細節不受任何標準的規範。打開它的源代碼,看看它是否真的對你很重要。 –
* malloc()可能獲得16字節(或更大)塊的內存。在這種情況下,很可能會有比您想象的更多的開銷,或者僅僅是從操作系統獲得的空間比您要求的要多。並不是說任何這樣的額外空間都可以安全使用,''malloc()'可能會使用它來滿足未來的一些請求,而不需要從操作系統獲得額外的內存。 –
我如何獲得我的malloc源代碼? @Eugene Sh。 –