如何限制堆的大小,以便在分配大量时不会卡住机器?
How I can limit the heap's size so when I allocate a lot it won't get the machine stuck?
有时我必须调试快速分配内存的程序(不是故意的。)当这种情况发生时,我的整个计算机都会停止响应,因为物理内存达到100%(我有4GB ram),然后我每次都必须按下重新启动按钮,无法知道为什么会发生这种情况。
有没有办法限制new
或malloc
的堆大小?通过限制,我的意思是它将抛出像C#的OutOfMemoryException
一样的异常。注意:我不能只选择所有的new
和malloc
,然后用定制的分配器替换它,这需要做很多工作。
我尝试将项目属性->配置属性->链接器->系统->堆保留\提交大小设置为256MB
或256000000
,但没有任何效果。
是的,在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
相关文章:
- 将数组的地址分配给变量并删除
- vector.resize()中的分配错误
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- Win32编译器选项和内存分配
- 函数中堆分配的效果与缺少堆分配的情况
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 获取字符串的长度并将其分配给数组
- 将地址分配给本地指针后,公共对象的变量将消失
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 我在二维向量中是否正确分配了内存
- 如何在本地机器上运行c++和javascript客户端代码(hackerbank风格)
- 正在尝试重载二进制搜索树分配运算符
- GlobalAlloc而不是其他分配方法
- 自定义先决条件对移动分配运算符有效吗
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- 如何限制堆的大小,以便在分配大量时不会卡住机器?
- 为什么在我的机器上std::vector的分配和释放比动态数组慢