LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 237|回复: 0

处理内存不足

[复制链接]
发表于 2024-2-4 23:29:38 | 显示全部楼层 |阅读模式
从 new 表达式中测试失败分配的方式取决于是使用标准异常机制还是使用 nullptr 返回。 标准 C++ 要求分配器引发 std::bad_alloc 或派生自 std::bad_alloc 的类。 可以处理此类异常,如以下示例所示:

#include <iostream>
#include <new>
using namespace std;
#define BIG_NUMBER 10000000000LL
int main() {
   try {
      int *pI = new int[BIG_NUMBER];
   }
   catch (bad_alloc& ex) {
      cout << "Caught bad_alloc: " << ex.what() << endl;
      return -1;
   }
}
使用 nothrow 格式的 new 时,可以测试分配失败,如以下示例所示:

#include <iostream>
#include <new>
using namespace std;
#define BIG_NUMBER 10000000000LL
int main() {
   int *pI = new(nothrow) int[BIG_NUMBER];
   if ( pI == nullptr ) {
      cout << "Insufficient memory" << endl;
      return -1;
   }
}
使用 nothrownew.obj 文件替换全局 operator new 时,可以测试失败的内存分配,如下所示:

#include <iostream>
#include <new>
using namespace std;
#define BIG_NUMBER 10000000000LL
int main() {
   int *pI = new int[BIG_NUMBER];
   if ( !pI ) {
      cout << "Insufficient memory" << endl;
      return -1;
   }
}
可以为失败的内存分配请求提供处理程序。 可以编写自定义恢复例程来处理此类失败。 例如,它可以释放一些保留内存,然后允许分配再次运行。 有关详细信息,请参阅 _set_new_handler。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表