【发布时间】:2010-12-11 22:57:03
【问题描述】:
我一直在阅读有关 Linux 内存不足的情况,手册页中的以下段落让我思考:
默认情况下,Linux 遵循乐观的内存分配策略。这意味着当 malloc() 返回非 NULL 时,不能保证内存确实可用。这是一个非常糟糕的错误。如果发现系统内存不足,一个或多个进程将被臭名昭著的 OOM 杀手杀死。 [...]
考虑到 operator new 实现最终会在某个时候调用 malloc,是否有任何保证 new 会在 Linux 上实际抛出?如果没有,如何处理这种明显无法检测到的错误情况?
【问题讨论】:
-
现在看,你在想。别。因为rpg,你无法控制投掷什么,谁得到指针,谁被OOM杀死或为什么。这不取决于你。这只是 Linux。
-
@Jonathan Leffler:我把标题改回“always;”如果 new 成功返回但没有可用内存,则它不符合 C++ 标准;因此,问题真的是“新的总是会抛出吗?”或者,“new 永远不会扔吗?”而不是“新的会扔吗?” (不过,我不想踩到任何脚趾……如果有人认为我错了,请告诉我……)
-
感谢大家的回答!
-
@James:我对你的改写没有意见。我确实认为原标题“Linux 乐观 malloc:new 总是会抛出?”错了;如果 new 总是抛出(即使没有内存不足),没有人会用 C++ 编写代码。
标签: c++ linux memory-management out-of-memory