如果malloc调用VirtualAlloc()函数来分配内存(分配最小4Kb),malloc如何为int分配4个字节?
答案 0 :(得分:7)
malloc
以page 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字节。但这可能取决于平台。