如果 malloc 调用 VirtualAlloc() 函数分配内存(分配最小 4Kb),malloc 如何为 int 分配 4 个字节?
问问题
1229 次
2 回答
8
malloc
以页面大小的倍数从操作系统请求内存(显然,因为页面大小是根据定义分配的内存量)并将其以较小的块分发给您。
这与所有内存分配器所做的没有什么不同——事实上,在幕后Boost.Pool
使用的专用内存分配器(例如 )再次这样做:它们分配更大的内存块并将其以较小的部分分配给您。malloc
malloc
于 2014-01-28T16:20:13.937 回答
1
我正在处理的应用程序在内部使用 Doug Lea ( ftp://g.oswego.edu/pub/misc/malloc.c ) 的 malloc.c 实现,它在许多平台上广泛使用。
此实现从系统中获取内存,如果 Windows 使用 VirtualAlloc 保留和提交 64KB 块。然后它使用各种算法和结构来尽可能有效地使用这块内存。
我测试了 2 个字节的分配,从调试器中我看到它首先将其填充到 4 个字节,然后将其放入 SmallBins——这是一种处理小内存分配的方法。最后我看到这个分配的实际内存使用量是 16 字节。但这可能取决于平台。
于 2014-01-28T16:34:03.733 回答