基准报告:分析内存分配器中的时空权衡(hakozuna vs tcmalloc)
发布: (2026年1月19日 GMT+8 11:17)
3 min read
原文: Dev.to
Source: Dev.to
基准概览
一个自定义内存分配器 hz3(称为 hakozuna)与两个业界标准分配器进行评估:
- tcmalloc(Google)
- mimalloc(Microsoft)
重点在于执行速度与内存占用(RSS)之间的权衡。
测试环境
- CPU: AMD Ryzen 9 9950X
- 每个测试的运行次数: 5(报告中位数)
结果
1. Espresso(真实场景模拟)
| 分配器 | 时间 | RSS | 备注 |
|---|---|---|---|
| tcmalloc | 2.43 s | 9.7 MB | 最快,但内存使用最高 |
| mimalloc | 2.45 s | 4.0 MB | 平衡 |
| hakozuna | 2.75 s | 2.6 MB | 最慢(+13 %),但内存最低 |
2. Alloc‑test(合成测试)
| 分配器 | 时间 | RSS | 备注 |
|---|---|---|---|
| tcmalloc | 1.99 s | 18.2 MB | |
| mimalloc | 2.00 s | 22.0 MB | |
| hakozuna | 2.51 s | 14.5 MB | 占用最小 |
分析
速度的代价
- tcmalloc 在两个基准测试中都实现了最快的执行时间。
- 它消耗的内存显著更多(在 Espresso 测试中 RSS 大约高出 3.7 倍:9.7 MB 对比 2.6 MB)。
- 该分配器在线程本地存储中积极缓存已释放的内存,最小化锁定和 CPU 开销,但以更大的内存占用为代价。
节约的代价
- hakozuna 始终记录了最低的 RSS。
- 这是因为其采用了积极的清理策略,将未使用的页面返回给操作系统,并且元数据设计紧凑。
- 内存使用的降低伴随着执行时间的适度增加。
选择合适的分配器
- 对延迟敏感且内存充足的应用:tcmalloc 或 mimalloc 仍是更佳选择。
- 内存受限的环境(例如高密度微服务、嵌入式系统):hakozuna 通过显著降低内存消耗提供了可行的替代方案,接受轻微的 CPU 惩罚。
结论
该基准测试强调,“性能”并非单一指标。它始终是 时间(执行速度)与 空间(内存使用)之间的平衡。选择分配器应依据目标工作负载的具体优先级来决定。