我在使用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;
}
感谢您的帮助..!
答案 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