allocators¶
是什么 / 解决什么问题¶
动态分配会带来锁、元数据访问、page fault 和尾延迟抖动。低延迟 C++ 程序通常会减少热路径上的 new/delete。
常见策略¶
| 策略 | 适用场景 |
|---|---|
| object pool | 固定类型对象反复创建销毁 |
| arena | 一批对象同生命周期释放 |
| freelist | 高速回收同尺寸对象 |
| reserve | vector/string 等容器提前扩容 |
原则¶
- 热路径不分配。
- 对象生命周期清晰。
- 分配和释放尽量在同一线程或同一 NUMA node。
- 池化对象要处理脏状态清理。
常见陷阱¶
- 对象池没有上限,退化成隐藏内存泄漏。
- 回收对象未重置字段。
- freelist 跨线程共享导致竞争。
- 为了避免分配引入复杂生命周期 bug。
面试高频问题¶
为什么 malloc 会影响尾延迟¶
分配器可能加锁、访问全局元数据、触发系统调用、触发 page fault,且成本不稳定。低延迟系统更关注最坏路径和抖动。