glibc 内存分配:竞技场和调试

glibc 内存分配:竞技场和调试

最新版本的 glibc(从 2.12 开始?)具有可调的 MALLOC_ARENA_MAX 和 MALLOC_PER_THREAD。

问题 :

  1. MALLOC_PER_THREAD=0 和 MALLOC_ARENA_MAX=1 之间有什么区别吗?最新的 glibc 是否仍然支持 MALLOC_PER_THREAD ?

  2. Arenas 增加了虚拟内存的使用:适合 32 位内核吗?

  3. 它们也适用于单核CPU(虚拟客户)吗?

  4. 如果我启用内存检查

MALLOC_CHECK_=3

glibc 使用基本调试分配器还是默认分配器?

曾几何时,我读过 glibc 并使用某种调试使用基本分配器而不是常规分配器......但我找不到文档。

答案1

  1. 据我了解,MALLOC_PER_THREAD这是 RHEL 上提供的临时配置旋钮,用于启用新的每线程分配器(请参阅相应的 CentOS 发行说明了解详情)。它在当前版本中不再可用glibc,并且新的分配器在 2.15 中成为默认分配器(我认为)。设置MALLOC_ARENA_MAX=1意味着只能有一个 arena,它具有类似的效果,但可能不严格等效,因为“新”分配器的其他部分在这种情况下仍然处于活动状态。

  2. 是的,它们适用于 32 位内核;但默认调整不同(M_ARENA_TEST32 位系统上为 2,其他系统上为 8)。

  3. 在单核系统上使用多个 arena 可能没有多大意义,但默认调整应该考虑到这一点(arena 的硬限制通常是可用 CPU 数量的倍数)。

  4. M_CHECK_ACTION=3现在是默认值,因此启用内存检查使用默认分配器。

这方面的用户级文档位于男子马洛普

glibc 2.26应该有一个新的每线程缓存,缓存,但这显然需要一段时间才能在发行版中可用。 (计划发布日期是今年8月1日)。

相关内容