gpt4 book ai didi

c - 如何使用 malloc() 在 redhat 中分配比 RAM 多的内存?

转载 作者:太空宇宙 更新时间:2023-11-04 12:38:28 25 4
gpt4 key购买 nike

系统信息: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

内存 48GB

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

我发现在 8 GB RAM 的 macOS 中可以分配 100GB(clang 编译)。我对此很困惑。

也许这个链接中描述了惰性分配? Why malloc() doesn't stop on OS X?

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


结果:经过调查,我发现下面两步会让malloc()不受限制:

  1. echo "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,根据请求分配的大小在两者之间进行选择。

关于c - 如何使用 malloc() 在 redhat 中分配比 RAM 多的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40888758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com