高质量C++/C编程指南-第7章-内存管理(5)[VC/C++编程]
本文“高质量C++/C编程指南-第7章-内存管理(5)[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
7.9 内存耗尽怎么办?
假如在申请动态内存时找不到充足大的内存块,malloc和new将返回NULL指针,宣布内存申请失利.普通有三种方法处理“内存耗尽”问题.
(1)判断指针能否为NULL,假如是则即刻用return语句终止本函数.比方:
void Func(void)
{
A *a = new A;
if(a == NULL)
{
return;
}
…
}
(2)判断指针能否为NULL,假如是则即刻用exit(1)终止整个程序的运行.比方:
void Func(void)
{
A *a = new A;
if(a == NULL)
{
cout << “Memory Exhausted” << endl;
exit(1);
}
…
}
(3)为new和malloc设置非常处理函数.比方Visual C++可以用_set_new_hander函数为new设置用户自己定义的非常处理函数,也可以让malloc享用与new相同的非常处理函数.具体内容请参考C++利用手册.
上述(1)(2)方法利用最广泛.假如一个函数内有多处需求申请动态内存,那么方法(1)就显得力不从心(释放内存很麻烦),应当用方法(2)来处理.
很多人不忍心用exit(1),问:“不编写出错处理程序,让操作系统自己办理行不行?”
不行.假如发生“内存耗尽”这样的事情,普通说来利用程序已经无药可救.假如不用exit(1) 把坏程序杀死,它大概会害死操作系统.原理好像:假如不把暴徒击毙,暴徒在老死之前会犯下更多的罪.
有一个很重要的现象要奉告大家.关于32位以上的利用程序而言,无论怎样利用malloc与new,几近不大概招致“内存耗尽”.我在Windows 98下用Visual C++编写了测试程序,见教例7-9.这个程序会无停止地运行下去,根本不会终止.因为32位操作系统支持“虚存”,内存用完了,自动用硬盘空间顶替.我只听到硬盘嘎吱嘎吱地响,Window 98已经累得对键盘、鼠标毫无反映.
我可以得出这么一个结论:关于32位以上的利用程序,“内存耗尽”错误处理程序毫无用处.这下可把Unix和Windows程序员们乐坏了:反正错误处理程序不起作用,我就不写了,省了很多麻烦.
我不想误导读者,必须夸大:不加错误处理将招致程序的质量很差,千万不可因小失大.
void main(void)
{
float *p = NULL;
while(TRUE)
{
p = new float[1000000];
cout << “eat memory” << endl;
if(p==NULL)
exit(1);
}
}
示例7-9试图耗尽操作系统的内存
以上是“高质量C++/C编程指南-第7章-内存管理(5)[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |