c++ - HeapAlloc 簿记

标签 c++ windows memory-management heap-memory

我读过 ( 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/

相关文章:

c++ - 如何使用迭代器和用户类正确地制作模板函数

C++ MVC 模型到 viewmodel "translation"和继承

c++ - 递归函数,它在 C++ 中的数组( vector )中写入整数?

windows - 双击时如何使Windows批处理文件暂停?

c# - 大对象堆中的大字符串会导致问题——但在任何情况下它都必须以字符串结束

memory-management - 为什么代码段对于同一程序的不同实例是通用的

scala - 如何减少在 Scala 中创建的对象数量?

C++如何检查流(iostream)是否可搜索

windows - 在 Golang 中使用 Exec 时如何隐藏命令提示符窗口?

Python os.path.isdir 对于点返回 true