malloc如何分配小于4KB的内存?

时间:2014-01-28 16:15:04

标签: c++ c malloc virtualalloc

如果malloc调用VirtualAlloc()函数来分配内存(分配最小4Kb),malloc如何为int分配4个字节?

2 个答案:

答案 0 :(得分:7)

mallocpage size的倍数向操作系统请求内存(显然,由于页面大小按照定义分配了内存量),并以较小的块将其交给您。

这与所有内存分配器没有什么不同 - 事实上,在幕后使用malloc的专用内存分配器(例如Boost.Pool)再一次完成了这一点:它们分配了更大的块记忆通过malloc并以较小的部分交给你。

答案 1 :(得分:1)

我正在使用的应用程序是内部使用Doug Lea(ftp://g.oswego.edu/pub/misc/malloc.c)的malloc.c实现,它在许多平台上被广泛使用。

此实现从系统获取内存,如果Windows保留64KB块并使用VirtualAlloc提交。然后它使用各种算法和结构尽可能有效地使用这个存储器。

我测试了2个字节的分配,并且从调试器我看到它首先将其填充到4个字节,并将其放入SmallBins - 这是一种处理小内存分配的方法。最后,我看到这个分配的实际内存使用量是16字节。但这可能取决于平台。