C++stdlib.h system()命令在分配8GB内存后无法工作

C++ stdlib.h system() command wont work after allocating 8GB memory

本文关键字:内存 8GB 工作 分配 system 命令 C++stdlib      更新时间:2023-10-16

我在ubuntu 13.04 64位下运行以下示例代码,该代码使用英特尔编译器14工具链安装了16 GB内存。

我有一个关于系统的问题("做一些害羞的事…")在我的申请后无法工作在某一点上分配的。在解决了这个问题几个小时后,我意识到我在某个时刻分配了8GB的内存,这不允许我再使用system()命令。

不用说,在分配内存之前,我可以自由使用系统。

代码片段:

#include <string.h>
#include <iostream>
#include "stdlib.h"
int main() {
char ** buffer = new char*[100];
system("logger TRYING..!");
for(int i= 1; i<=80; i++)
{
   buffer[i] = new char[200*1000*1000];
}
system("logger SUCCESS..!");
return 0;
}

谢谢你的帮助。。!

system调用fork,这将使流程所需的RAM增加一倍。由于您使用的是8 GB,而只有16 GB,因此您的容量不足,fork将失败。也就是说,fork是用写页复制实现的,这意味着如果不更改子进程的内存,RAM实际上就不会复制。在这种情况下,您不会写入该内存,但操作系统不知道这一点,因此fork失败。您应该通过检查system的返回值来确认这一点(如果fork失败,则为-1)。

你可以试着启用过度使用内存来允许"过度使用内存"。这应该会让fork成功。在你的情况下,我可能只是暂时启用它。

# Enable overcommit
echo 1 > /proc/sys/vm/overcommit_memory
# Disable overcommit
echo 0 > /proc/sys/vm/overcommit_memory