![glibc 内存分配:竞技场和调试](https://linux22.com/image/9762/glibc%20%E5%86%85%E5%AD%98%E5%88%86%E9%85%8D%EF%BC%9A%E7%AB%9E%E6%8A%80%E5%9C%BA%E5%92%8C%E8%B0%83%E8%AF%95.png)
最新版本的 glibc(从 2.12 开始?)具有可调的 MALLOC_ARENA_MAX 和 MALLOC_PER_THREAD。
问题 :
MALLOC_PER_THREAD=0 和 MALLOC_ARENA_MAX=1 之间有什么区别吗?最新的 glibc 是否仍然支持 MALLOC_PER_THREAD ?
Arenas 增加了虚拟内存的使用:适合 32 位内核吗?
它们也适用于单核CPU(虚拟客户)吗?
如果我启用内存检查
MALLOC_CHECK_=3
glibc 使用基本调试分配器还是默认分配器?
曾几何时,我读过 glibc 并使用某种调试使用基本分配器而不是常规分配器......但我找不到文档。
答案1
据我了解,
MALLOC_PER_THREAD
这是 RHEL 上提供的临时配置旋钮,用于启用新的每线程分配器(请参阅相应的 CentOS 发行说明了解详情)。它在当前版本中不再可用glibc
,并且新的分配器在 2.15 中成为默认分配器(我认为)。设置MALLOC_ARENA_MAX=1
意味着只能有一个 arena,它具有类似的效果,但可能不严格等效,因为“新”分配器的其他部分在这种情况下仍然处于活动状态。是的,它们适用于 32 位内核;但默认调整不同(
M_ARENA_TEST
32 位系统上为 2,其他系统上为 8)。在单核系统上使用多个 arena 可能没有多大意义,但默认调整应该考虑到这一点(arena 的硬限制通常是可用 CPU 数量的倍数)。
M_CHECK_ACTION=3
现在是默认值,因此启用内存检查使用默认分配器。
这方面的用户级文档位于男子马洛普。
glibc 2.26应该有一个新的每线程缓存,缓存,但这显然需要一段时间才能在发行版中可用。 (计划发布日期是今年8月1日)。