C++stdlib.h system()命令在分配8GB内存后无法工作
C++ stdlib.h system() command wont work after allocating 8GB memory
我在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
相关文章:
- 将字符串存储在c++中的稳定内存中
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 带内存和隔离功能的SQLite
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 迭代时从向量和内存中删除对象
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 为什么示例代码访问IUnknown中已删除的内存
- 如何在C++类内存结构中创建"spacer"?
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 类型总是使用其大小存储在内存中吗
- 我的 265GB RAM 笔记本电脑上的内存是否超过 8GB
- C++stdlib.h system()命令在分配8GB内存后无法工作