c++ - 我如何限制堆的大小,这样当我分配很多时它不会让机器卡住?

标签 c++ windows visual-studio memory-management heap-memory

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

有没有办法限制newmalloc 堆的大小?我所说的限制是指它会像 C# 的 OutOfMemoryException 一样抛出异常。注意:我不能只选择所有的 newmalloc 并将其替换为自定义的分配器,这需要做很多工作。

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

最佳答案

是的,使用 CRT 中的调试堆 Hook 。

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

关于c++ - 我如何限制堆的大小,这样当我分配很多时它不会让机器卡住?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26908344/

相关文章:

c++ - 友好度和派生类

c++ - Bagon 先生为 Mean Shift Segmentation 提供的 edison_wrapper_mex.cpp 的 Mex 文件在 MATLAB 2014a 中不起作用

c++ - 什么是 “Argument-Dependent Lookup”(又名ADL或 “Koenig Lookup”)?

windows - 使用Media Foundation从文件播放音频到扬声器

c# - 使用 ReSharper 在 Visual Studio 的自动格式化中换行和换行

使用 Visual Studio 2008 的 2.0 中的 C# .NET 3.0/3.5 功能

c++ - 类内结构内的 vector

javascript - 当我的页面在 IE 中加载时,窗口立即跳到其他窗口后面

windows - 对于 FOR 循环中的目录, “%~zI” 究竟扩展到了什么?

visual-studio - 如何在 Visual Studio 上以管理员身份运行最近的项目或解决方案