0

在过去的四年中,我使用 pageheap 来调试堆损坏。一般来说,我没有任何问题。但现在我面临着奇怪的行为。在 win7-sp1-x86 主机中使用具有以下标志的全局标志为我的进程启用页面堆后:-启用堆尾检查-启用无堆检查-启用页面堆

我注意到内存不足异常导致崩溃。!address -summary 命令表示 PageHeap 消耗了大约 90% 的虚拟内存。

这对我来说真的很奇怪,因为据我所知,pageheap 不应该导致如此大的内存开销。

请有人解释这种行为的原因是什么?

4

1 回答 1

0

当运行启用全页堆的应用程序时,为每个“malloc”分配 2 个页面 (4kb)。当内存被释放时,这些页面(或者可能只是第一个)仍然是“保留的”:它们不占用任何物理或页面文件内存,但是虚拟地址范围不可用,并且在以下情况下引发访问冲突试图访问此内存。这允许捕获 read-after-free 类型的错误。因此,即使您为每个 malloc 正确调用 free,应用程序的虚拟地址空间也会不断增加。

于 2013-05-22T20:32:49.760 回答