我读过 ( http://www.nobugs.org/developer/win32/debug_crt_heap.html ),除了请求的内存块之外,HeapAlloc 还分配了一些内存用于簿记。簿记信息的大小应为 40 字节( block 前 8 字节, block 后 32 字节)。
但是,当我用我的 VS2010 运行测试时,实际消耗的内存明显更少。 例如,我将 1M 个整数插入到一个集合中。我为 malloc 写了一个钩子(Hook)函数来确保每次插入都会触发一个单独的动态内存分配请求来构造一个新节点。根据 hook 的说法,一个节点需要 20 个字节。如果我们加上 80 字节的开销,一个节点的总内存应该是 100 字节。也就是说,该集合应该消耗约 100 兆,而根据 TaskManager,它只需要 32 兆。
因此,我有以下问题:
开销真的是40字节吗? 开销是否适用于每个 HeapAlloc block ?
最佳答案
这似乎是一个困惑的问题。我不确定任务管理器显示的是物理内存还是虚拟内存。
如果您的分配要交换文件,它们可能不会反射(reflect)在任务管理器中。您应该尝试更高级的性能监控工具。
关于c++ - HeapAlloc 簿记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14644284/