c – 在大内存分配上使进程崩溃

我试图找到一个重要的内存泄漏(一次15MB,但在多个地方进行这样的分配).我检查了最明显的地方,然后使用了AQTime,但我仍然无法查明它.现在我看到剩下2个选项:

1)使用SetProcessWorkingSetSize:我已经尝试过了,但是当我用掉150MB以上的时候,我的过程很快就会继续运行:

DWORD MemorySize = 150*1024*1024;
SetProcessWorkingSetSize( GetCurrentProcess(), MemorySize/2, MemorySize*2 );

2)一次分配超过1MB时设置断点.我应该如何做到这一点,在内部使用’if> 1MB’重载operator new?

最佳答案 SetProcessWorkingSetSize并不意味着你认为它意味着什么 – 它是操作系统关于在内存中保留多少内存而不是分页到磁盘的线索.在将未使用的内存分页到磁盘时,现代操作系统非常积极 – 特别是Windows.

除了非常彻底的代码分析之外,IBM Rational Purify是您唯一的解决方案.在Windows上,对于C/C++,没有更好的工具来查找内存泄漏.在Mac或Linux上你可以使用valgrind,但是AFAIK,它尚未在Windows上运行.

点赞