如何使用malloc()在redhat中分配比RAM更多的内存?
系统信息: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 Mon Nov 23 12:55:32 EST 2015
RAM 48 GB
问题:我想malloc()100 GB的内存。 但它不能在redhat系统上分配。
我发现100GB可以在8GB RAM的macOS中分配(clang compile)。 我对此很困惑。
也许这个链接中描述了懒惰分配? 为什么malloc()不会在OS X上停止?
但为什么linux系统不能? 我尝试Ubuntu和Redhat,都没有达到。
结果 :经过调查,我发现以下两个步骤将让malloc()无限制:
echo“1”> / proc / sys / vm / overcommit_memory
ulimit -v无限制
可能的原因:
系统没有物理RAM或交换空间。
在32位模式下,过程大小限制被击中。
可能的解决方案:
减少系统上的内存负载。
增加物理内存或交换空间。
检查交换后备存储是否已满。
我认为这些观点可以帮助您理解malloc失败问题。
输入验证。 例如,您在单个分配中要求提供多个千兆字节的内存。 确切的限制(如果有的话)因malloc实现而异; POSIX对最大值没有提及,只是它的类型是size_t。
分配失败。 对于基于数据段的malloc,这意味着brk失败。 这发生在新数据段无效,系统内存不足或进程超过其最大数据段大小(由RLIMIT_DATA指定)时发生。 使用基于映射的malloc,这意味着mmap失败。 当进程超出虚拟内存(由RLIMIT_AS指定),超出映射限制或请求过大的映射时,会发生这种情况。 注意大多数现代Unix系统使用brk和mmap的组合来实现malloc,根据请求分配的大小在两者之间进行选择。
链接地址: http://www.djcxy.com/p/80257.html上一篇: How to use malloc() allocates memory more than RAM in redhat?
下一篇: Proc crashes even if it allocates less memory than limited by ulimit