Linux
glibc 記憶體分配:競技場和調試
最新版本的 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,使用基本分配器而不是正常分配器……但我找不到文件。
- 據我了解,這
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
現在是預設設置,因此啟用記憶體檢查使用預設分配器。使用者級文件位於man mallopt中。
glibc 2.26應該有一個新的每執行緒記憶體tcache,但這顯然需要一段時間才能在發行版中使用。(計劃發布日期為今年8月1日)。