我读过( http://www.nobugs.org/developer/win32/debug_crt_heap.html ),除了请求的内存块以外,HeapAlloc还为记账分配了一些内存。 簿记信息的大小应该是40个字节(块前8个字节,后32个)。
但是,当我用VS2010运行一个testing时,实际的内存消耗就显着减less了。 例如,我将1M ints插入到一个集合中。 我为malloc编写了一个钩子函数,以确保每个插入触发一个单独的dynamic内存分配请求来构造一个新的节点。 一个节点,根据钩子,需要20个字节。 如果我们添加80个字节开销,一个节点的总内存应该是100个字节。 这是该集应该消耗~100兆,而根据TaskManager它只需要32兆。
因此,我有以下问题:
开销真的是40字节吗? 开销是否适用于每个HeapAlloc'ed块?
如果多次调用,GetProcessHeap()是否会在同一个进程中返回相同的句柄值?
find只发生在性能testing下的堆损坏的最佳方式是什么?
CString在内核中与HeapWalk和HeapLock / HeapUnlock死锁结合使用
如何在Linux中限制ac代码的堆大小
你如何找出谁创build了一个私人堆?
为什么malloc / new捕获callstack?
为什么堆的数量总是1?
在C ++应用程序运行期间检查各种内存使用情况
在Windows中设置默认堆大小
这似乎是一个混乱的问题。 我不确定任务管理器是显示物理还是虚拟内存。
如果您的分配将交换文件,它们可能不会反映在任务管理器中。 您应该尝试更先进的性能监视工具。
我相当确定malloc不会调用每个分配的HeapAlloc,我期望。 当然,在glibc的情况下,操作系统只是调用一个更大的内存块,这是分裂的 – 比操作系统分配开销更小的开销。
你可以通过调用malloc和调用HeapAlloc一百万次的时间来测试一小块内存(例如20字节)。 需要更长的时间? 如果HeapAlloc速度更快,那么每个malloc都会调用HeapAlloc ,但我期望malloc快得多。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。