我在过去四年中使用了pageheap来调试堆损坏。一般来说,我没有任何问题。但现在我面临着奇怪的行为。 使用带有以下标志的全局标志在win7-sp1-x86主机中为我的进程启用pageheap之后: - 启用堆尾检查 - 启用堆免费检查 -Enable Page Heap
我注意到因内存不足异常而崩溃。 !address -summary命令表示PageHeap消耗了~90%的虚拟内存。
对我来说真的很奇怪,因为据我所知,pageheap不应该导致如此大量的内存开销。
可以请某人解释什么是这种行为的原因?
答案 0 :(得分:0)
运行启用了完整页堆的应用程序时,为每个'malloc'分配2页(4kb)。释放内存时,这些页面(或者可能只是第一个页面)仍然是“保留”的:它们不占用任何物理或页面文件内存,但虚拟地址范围不可用,并且在以下情况下会引发访问冲突试图访问这个内存。这允许捕获免费读取后的错误。因此,即使您正确地为每个malloc调用free,应用程序的虚拟地址空间也会不断增加。