系统信息: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 2015
RAM 48 GB
问题:我想要malloc()100 GB内存。但它无法在redhat系统上进行分配。
我发现可以在带有8 GB RAM的macOS中分配100GB(clang编译)。我对此非常困惑。
这个链接中可能有懒惰分配? Why malloc() doesn't stop on OS X?
但是为什么linux系统不能?我尝试使用ubuntu和redhat,但都没有达到目的。结果: 经过调查,我发现以下两个步骤会让malloc()无限制:
echo" 1" >的/ proc / SYS / VM / overcommit_memory
ulimit -v unlimited
答案 0 :(得分:0)
可能的原因:
系统超出物理RAM或交换空间。
在32位模式下,已达到进程大小限制。
可能的解决方案:
减少系统上的内存负载。
增加物理内存或交换空间。
检查交换后备存储是否已满。
我认为这一点可以帮助您了解malloc故障问题。
输入验证。例如,您在单个分配中要求许多千兆字节的内存。确切的限制(如果有的话)因malloc实现而异; POSIX没有说明最大值,其类型不是size_t。
分配失败。使用基于数据段的malloc,这意味着brk失败了。当新数据段无效,系统内存不足或进程超出其最大数据段大小(由RLIMIT_DATA指定)时,会发生这种情况。使用基于映射的malloc,这意味着mmap失败。当进程超出虚拟内存(由RLIMIT_AS指定),超出其映射限制或请求过大的映射时,会发生这种情况。注意大多数现代Unix系统使用brk和mmap的组合来实现malloc,根据请求的分配大小在两者之间进行选择。