我想通过以下功能捕捉内存溢出异常:如何抓住内存溢出异常在Ubuntu
void allocMemory(buffer& thebuf, size_t size)
{
try
{
thebuf = buffer(size); // new char[] here
}
catch(bad_alloc& ex)
{
exception handling... // print some information
exit(1);
}
}
的处理应该显示一些信息和关闭程序。这项工作在Windows上很好,但在Linux上,程序直接与终端上的“Killed”关闭。看起来OOM杀手在异常可以捕捉之前杀死我的程序。
这是正常的吗?
如何捕获Linux上的内存异常?
P.S.我正在测试Ubuntu 12.04 64位,仅使用4GB内存进行测试,没有交换空间,语言是C++。另外,如果我一次新增大量内存,该功能在Linux上也可以使用。但是,如果我每次新增一点点(例如:在一个循环中),程序将最终以终止的“Killed”关闭。
任何帮助,将不胜感激。
感谢您的链接。但是由于我们的用户可能没有root权限,因此可能无法要求他们配置Linux,是否有更好的方法来检测Linux上的内存不足? –