看到《高质量编程》上的一句话,“大多数初学者不懂得内存分配可能会失败的情况”,想想确实挺有意思,自己好像从没有内存分配失败,遂写一个小程序就让失败一次看看。
int _tmain(int argc, _TCHAR* argv[])
{
double a = 2;
double b = 28;
double n = pow(a,b);
n *= 1.5; //改为2就是2G的分配量了
cout<<"n = "<<n<<endl;
int *p = new int[n];
if(NULL != p)
{
memset(p,0,n);
cout<<"success!"<<"p: "<<p<<endl;
//防止程序退出
for(int i = 1;i <1;i++)
{
i--;
}
}
else
cout<<"Error!";
return 0;
}
此处将内存分配量设为1.5G,事实上已经接近极限了,这是内存图
当设成2G的时候,直接就弹出错误了,这也符合winNT的内存分配准则,应用程序2G的可用内存。
ps:在运行上述程序时观看进程的内存占用变化情况真是一件伤心悦目的事情啊,exploer最后只剩2m,实在是像榨汁机一样的在榨干内存啊。而pagefile也终于在真正干活了,那几条杠杠相当醒目啊。