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

How malloc allocates memory less than 4KB?

本文关键字:小于 4KB 内存 分配 何分配 malloc      更新时间:2023-10-16

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

malloc以页面大小的倍数向操作系统请求内存(很明显,因为页面大小根据定义是分配的内存量),并将其以较小的块分发给您。

这与所有内存分配器的作用没有什么不同——事实上,在幕后使用malloc的专用内存分配器(例如Boost.Pool)又一次做到了这一点:它们通过malloc分配更大的内存块,并将其分成更小的部分分发给您。

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

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

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