c++ - Unix - 防止内存消耗失控导致 PC 崩溃?

标签 c++ c linux unix memory-management

针对 .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/

相关文章:

c++ - count_until 和 accumulate_until 的实现?

c++ - 为什么我不能编译一个以一对为键的 unordered_map?

c - 简单 C Bootstrap /内核的问题

php - 有没有办法使用本地网络服务器从批处理文件运行 PHP 网站?

c - 赋值从指针生成整数

c++ - 检测并移除网格的隐藏表面

c++ - 通过减少填充 header 的数量来隐藏实现细节

linux - 在 CentOS 5.x/6.x 上安装 Mono 和 Monodevelop

linux - 无法写入已安装(外部)HDD

linux - vncviewer,virt-viewer 无法打开显示