针对 .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 <size>
在你开始你的程序之前,或者 setrlimit
以编程方式在其中。
关于c++ - Unix - 防止内存消耗失控导致 PC 崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7931517/