我想通過以下功能捕捉內存溢出異常:如何抓住內存溢出異常在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上的內存不足? –