繁体   English   中英

在Redhat中,如何使用malloc()分配内存多于RAM?

[英]How to use malloc() allocates memory more than RAM in redhat?

系统信息:Linux版本2.6.32-573.12.1.el6.x86_64(mockbuild@x86-031.build.eng.bos.redhat.com)(gcc版本4.4.7 20120313(Red Hat 4.4.7-16)( GCC))#1 SMP 2015年11月23日星期一12:55:32 EST

内存48 GB

问题:我想malloc()100 GB内存。 但是它无法在redhat系统上分配。

我发现可以在具有8 GB RAM(clang编译)的macOS中分配100GB。 我对此感到非常困惑。

也许在此链接中描述了惰性分配? 为什么malloc()在OS X上不停止?

但是为什么Linux系统不能呢? 我尝试ubuntu和redhat,但都失败了。


结果 :经过调查,我发现以下两个步骤将使malloc()不受限制:

  1. 回声“ 1”> / proc / sys / vm / overcommit_memory

  2. ulimit -v无限

可能的原因:

  1. 系统没有物理RAM或交换空间。

  2. 在32位模式下,达到了进程大小限制。

可能的解决方案:

  1. 减少系统上的内存负载。

  2. 增加物理内存或交换空间。

  3. 检查交换后备存储是否已满。

我认为这些要点可以帮助您了解malloc失败问题。

输入验证。 例如,您已在一次分配中要求许多GB的内存。 确切的限制(如果有)因malloc实现而异; POSIX没有提及最大值,除了其类型为size_t之外。

分配失败。 对于基于数据段的malloc,这意味着brk失败。 当新数据段无效,系统内存不足或进程超过其最大数据段大小(由RLIMIT_DATA指定)时,就会发生这种情况。 对于基于映射的malloc,这意味着mmap失败。 当进程内存不足(由RLIMIT_AS指定),超出映射限制或请求的映射过大时,就会发生这种情况。 注意,大多数现代Unix系统使用brk和mmap的组合来实现malloc,根据请求的分配大小在两者之间进行选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM