有时我必须调试快速分配内存的程序(不是设计使然),当它发生时我的整个计算机就停止响应,因为物理内存达到 100%(我有 4GB 内存),然后我必须按下重新启动按钮每次都不知道为什么会发生。
有没有办法限制new
或malloc
堆的大小?我所说的限制是指它会像 C# 的 OutOfMemoryException
一样抛出异常。注意:我不能只选择所有的 new
和 malloc
并将其替换为自定义的分配器,这需要做很多工作。
我尝试将项目属性 -> 配置属性 -> 链接器 -> 系统 -> 堆保留\提交大小设置为 256MB
或 256000000
但没有任何效果。
最佳答案
是的,使用 CRT 中的调试堆 Hook 。
您可以在分配大块时将 malloc 挂接到断点,使用 _CrtSetAllocHook
和 _CrtDbgBreak
。或者,如果您的问题是很多小块,您可以使用 _CrtSetBreakAlloc
在第 10,000 个分配(例如)上设置断点。
- CRT 调试堆:http://msdn.microsoft.com/en-us/library/974tc9t1%28v=VS.100%29.aspx
_CrtSetAllocHook
: http://msdn.microsoft.com/en-us/library/820k4tb8(v=vs.100).aspx_CrtDbgBreak
:http://msdn.microsoft.com/en-us/library/k4wx2tde(v=vs.100).aspx_CrtSetBreakAlloc
:http://msdn.microsoft.com/en-us/library/4wth1ha5(v=vs.100).aspx
关于c++ - 我如何限制堆的大小,这样当我分配很多时它不会让机器卡住?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26908344/