在没有例外的情况下,我看到几个帖子说
Thing* t = new(std::nothrow) Thing; // returns NULL on failure
if (!t) {
// allocation failure
}
例如
我相信这是他们从 C++ 标准中得到的声明,如引用:
如果分配函数声明为不抛出异常规范,则返回 null 以指示分配存储失败,否则返回非空指针。
然而,赫伯萨特 http://www.gotw.ca/publications/mill16.htm
linux会过度使用内存,这不符合c++标准。即,检查 null 与 linux 系统无关。“new”要么成功,要么失败,进程被 linux 杀死。
所以,我们能做些什么?似乎没有办法检查故障。
[更新] 关于 linux overcommit:overcommit_memory
0 — 默认设置。内核通过估计可用内存量和明显无效的失败请求来执行启发式内存过度使用处理。不幸的是,由于内存是使用启发式而不是精确算法分配的,因此此设置有时会导致系统上的可用内存过载。