就让内存分配失败一次吧
2008-10-16 01:41
323 查看
看到《高质量编程》上的一句话,“大多数初学者不懂得内存分配可能会失败的情况”,想想确实挺有意思,自己好像从没有内存分配失败,遂写一个小程序就让失败一次看看。
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
;
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也终于在真正干活了,那几条杠杠相当醒目啊。
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
;
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也终于在真正干活了,那几条杠杠相当醒目啊。
相关文章推荐
- VC6下使用STL注意:不要让内存分配失败导致您的旧版 STL 应用程序崩溃
- 内存分配失败
- std::bad_alloc 内存分配失败(备份)
- 用if还是try catch来判断内存分配失败
- malloc函数分配内存失败的原因及解决方法
- win32下的内存分配失败原因
- C++ Gotchas 条款61:检查内存分配失败的情形
- C++ Gotchas 条款61:检查内存分配失败的情形
- C++ Gotchas 条款61:检查内存分配失败的情形
- 重复WLAN连接将引发内存分配失败
- 内存分配失败错误处理
- malloc分配内存失败
- std::bad_alloc 内存分配失败(备份)
- C/C++中内存分配失败的处理方法
- malloc函数分配内存失败的原因及解决方法
- C++ Gotchas 条款61:检查内存分配失败的情形
- Loadlibrary 失败:998 内存分配访问无效
- 内存充足时,malloc内存分配失败问题
- C++的内存分配要检查失败吗?
- Oracle数据库案例整理-Oracle系统运行时故障-内存过少导致分配共享内存失败