【发布时间】:2011-10-28 15:36:55
【问题描述】:
针对.net Windows 环境提出了一个非常相似的问题:
How do you protect yourself from runaway memory consumption bringing down the PC?
这个问题是针对使用 C 或 C++ 的 Unix 环境提出的。例如,考虑下面的危险小块:
#include <vector>
int main() {
int n;
std::vector<double> A(n);
}
如果幸运的话,代码会抛出一个范围错误。如果您不走运(在我的情况下,内存中 a 的值是 283740392),代码将迅速使用所有可用的 RAM 并导致大量交换到磁盘,从而更快地将操作系统磨碎到虚拟停止状态,然后它可能会被杀死。当然,该进程总是可以最终被杀死,但通常可能需要几分钟才能恢复,因为所有其他正在运行的进程都必须重新加载到内存中。这不是一个问题,其答案意味着缺少 RAM,很容易给出一个失控的进程,淹没任何可用的机器。
【问题讨论】:
-
运行
ulimit -v <some_limit>怎么样?
标签: c++ c linux unix memory-management