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

时间:2014-09-02 13:25:28

标签: c++ linux system std ubuntu-13.04

我在使用intel编译器14工具链安装了16 GB内存的ubuntu 13.04 64bit下运行以下示例代码。

我有一个关于系统的问题("做一些羞涩的事情......")我的申请后不会工作 在证书点分配。 在解决了几个小时的问题之后,我意识到我在那个特定点分配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;
}

感谢您的帮助..!

1 个答案:

答案 0 :(得分:2)

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

您可以尝试启用过度使用内存,以便“过度使用内存”。这应该让fork成功。在你的情况下,我可能只是暂时启用它。

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

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