Unix - 保护自己免受失控的内存消耗降低PC?

Hoo*_*ked 2 c c++ unix linux memory-management

有关.netWindows环境的问题非常类似:

你如何保护自己免受失控的内存消耗降低PC?

这个问题是针对使用C或C++的Unix环境提出的.举个例子,考虑下面的危险小块:

#include <vector>
int main() {
  int n;
  std::vector<double> A(n);
}
Run Code Online (Sandbox Code Playgroud)

如果你很幸运,代码会抛出一个范围错误.如果你运气不好(在我的情况下,内存中的值是283740392),代码将很快使用所有可用的RAM并导致大量交换到磁盘,将操作系统更快地打磨到虚拟静止然后它就可以被杀死.当然,最终可以最终终止该进程,但通常需要几分钟才能恢复,因为所有其他正在运行的进程必须加载回内存.这不是一个问题,其答案意味着缺乏RAM,人们可能很容易给出一个失控的过程,淹没任何可用的机器.

Mar*_*k B 5

正如评论中所建议的那样,无论是ulimit -v <size>在您启动程序之前,还是以setrlimit编程方式在其中.