如何限制堆的大小,以便在分配大量时不会卡住机器?

How I can limit the heap's size so when I allocate a lot it won't get the machine stuck?

本文关键字:机器 分配 何限制      更新时间:2023-10-16

有时我必须调试快速分配内存的程序(不是故意的。)当这种情况发生时,我的整个计算机都会停止响应,因为物理内存达到100%(我有4GB ram),然后我每次都必须按下重新启动按钮,无法知道为什么会发生这种情况。

有没有办法限制newmalloc的堆大小?通过限制,我的意思是它将抛出像C#的OutOfMemoryException一样的异常。注意:我不能只选择所有的newmalloc,然后用定制的分配器替换它,这需要做很多工作。

我尝试将项目属性->配置属性->链接器->系统->堆保留\提交大小设置为256MB256000000,但没有任何效果。

是的,在CRT中使用调试堆挂钩。

在分配大块时,可以使用_CrtSetAllocHook_CrtDbgBreak将malloc挂接到断点。或者,如果你的问题是很多小块,你可以使用_CrtSetBreakAlloc在第10000个分配上设置一个断点(例如)。

  • 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