当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

高质量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++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>高质量C++/C编程指南-第7章-内存管理(6)</b>
  • 高质量C++/C编程指南-第7章-内存管理(7)
  • 高质量C++/C编程指南-第8章-C++函数的高级特点(1)
  • 高质量C++/C编程指南-第8章-C++函数的高级特点(2)
  • 高质量C++/C编程指南-第8章-C++函数的高级特点(3)
  • <b>高质量C++/C编程指南-第8章-C++函数的高级特点(4)</b>
  • <b>高质量C++/C编程指南-第9章-类的构造函数、析构函数与赋值函数(1</b>
  • 高质量C++/C编程指南-第9章-类的构造函数、析构函数与赋值函数(2
  • 高质量C++/C编程指南-第9章-类的构造函数、析构函数与赋值函数(3
  • 高质量C++/C编程指南-第9章-类的构造函数、析构函数与赋值函数(4
  • <b>高质量C++/C编程指南-第10章-类的担当与组合(1)</b>
  • 高质量C++/C编程指南-第10章-类的担当与组合(2)
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .