我已经写了一个程序运行在centOS下。我的内存+交换内存是16 GB。异常处理最大LIAM的RAM +交换内存
#include <iostream>
#include <list>
#include<cstdlib>
#include<new>
#include <exception>
using namespace std;
int main()
{
std::list<double> mylist;
double i;
try{
for (double i=1; i<=250000000; ++i) mylist.push_back(i);
}
catch (std::bad_exception& ba) {
cout << "Allocation failure: " << ba.what() << endl;
mylist.clear();
exit(1);
}
mylist.clear();
// std::cout << "mylist contains:";
// for (it=mylist.begin(); it!=mylist.end(); ++it)
// std::cout << ' ' << *it;
// std::cout << '\n';
return 0;
}
我的问题是当程序运行并越过RAM区域的内存分配,然后内存分配发生在交换内存。当交换内存已满时,操作系统杀死编程。我应该使用哪种类型的执行处理,这使我的程序能够充满可用内存,因此不会被操作系统所杀。
XY问题?为什么你需要用完所有的记忆? – stefan 2013-05-03 10:51:22
注意:如果你的系统只剩下很少的空闲内存,异常处理本身可能不起作用,因为“异常对象的内存以未指定的方式分配”[except.throw]/4。内存页的堆栈通常只会在必要时被提交(另一个可能的问题),所以我认为最好的办法不是试图占用所有的内存。分配大块也可能有帮助。 – dyp 2013-05-03 11:25:16