我在一台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。 –