相关疑难解决方法(0)

"内存不足"是一个可恢复的错误?

我已经编程了很长时间,我看到的程序,当它们内存不足时,会尝试清理并退出,即优雅地失败.我不记得上次我看到一个人真正尝试恢复并继续正常运行.

如此多的处理依赖于能够成功分配内存,特别是在垃圾收集语言中,似乎内存不足错误应归类为不可恢复.(不可恢复的错误包括堆栈溢出等.)

使其成为可恢复错误的令人信服的理由是什么?

language-agnostic memory memory-management exception error-recovery

74
推荐指数
7
解决办法
7950
查看次数

没有或例外?

我是一名学生,我对C++知之甚少,我试图扩展它.这更像是一个哲学问题.我不是想要实现某些东西.

以来

#include <new> 
//...
T * t = new (std::nothrow) T();
if(t)
{
    //...
}
//...
Run Code Online (Sandbox Code Playgroud)

将隐藏异常,并且因为与简单相比处理异常更重if(t),为什么不正常new T()不被认为是不太好的做法,考虑到我们将不得不try-catch()用来检查简单分配是否成功(如果我们不成功,只是看程序死了)?

new与使用nothrow new?相比,正常分配有哪些好处(如果有的话)?在这种情况下,例外的开销是微不足道的?

此外,假设分配失败(例如,系统中不存在内存).程序在那种情况下可以做什么,或者只是优雅地失败.当保留所有内存时,无法在堆上找到空闲内存吗?

如果分配失败,并且a std::bad_allocthrown,我们如何假设由于没有足够的内存来分配对象(例如a new int),将有足够的内存来存储异常?

谢谢你的时间.我希望这个问题符合规则.

c++ out-of-memory new-operator dynamic-memory-allocation

9
推荐指数
2
解决办法
4354
查看次数