我读过(http://www.nobugs.org/developer/win32/debug_crt_heap.html),HeapAlloc除了请求的内存块之外,还分配了一些用于簿记的内存。簿记信息的大小应为40字节(块前8个字节,块后32个字节)。

但是,当我使用VS2010运行测试时,实际消耗的内存却大大减少了。
例如,我将1M整数插入集合中。我为malloc编写了一个钩子(Hook)函数,以确保每次插入都会触发一个单独的动态内存分配请求,以构造一个新节点。根据钩子(Hook),一个节点占用20个字节。如果我们增加80字节的开销,则一个节点的总内存应为100字节。那是该集合应该消耗〜100兆,而根据TaskManager,它消耗低至32兆。

因此,我有以下问题:

开销真的是40个字节吗?
开销是否适用于每个HeapAlloc'ed块?

最佳答案

这似乎是一个困惑的问题。我不确定任务管理器是否显示物理或虚拟内存。

如果您的分配要交换文件,则它们可能不会反射(reflect)在任务管理器中。您应该尝试使用更高级的性能监视工具。

10-06 10:36