现在的位置: 首页 > 综合 > 正文

malloc申请空间到底有多少

2016年07月05日 ⁄ 综合 ⁄ 共 397字 ⁄ 字号 评论关闭

看《程序员的自我修养》这本书(P307),知道malloc是先从堆(默认1MB)申请空间,不够再调用mmap()申请虚拟空间。

但在做PAT DS 3-05时,出现超出预期的空间申请量。

最后去测试malloc,我连续malloc(1)并输出空间起始地址,发现相邻的空间,地址仍然相差32字节。测试了maloc(12),malloc(16)和malloc(24),得到的相邻地址值仍然相差32字节。

我的是64位机,用的ubuntu12.04(kernel 3.5) + gcc 4.6.3。

估计32位机malloc的地址对齐是16字节

注意填充部分也算在程序消耗内存里的。

windows下没有测试。

之后一直在想为何64位机malloc最少申请32字节空间。想起了堆分配算法或许用的位图或对象池,一次分配固定大小,会产生这样的碎片。

补充:在64位的freebsd上却不是这样,看来malloc的实现细节是不一样的

抱歉!评论已关闭.