内存分配器是系统软件中最基础也最容易被忽视的组件之一。微软研究院的 Daan Leijen 为此付出了多年心血,mimalloc 正是他给出的答案。这个项目不仅仅是代码,更是一种关于"什么是好的内存分配器"的设计哲学的体现。

mimalloc 的核心设计围绕着一个简单但深刻的观察:传统的内存分配器往往是全局的,所有线程竞争同一批内存资源,这会成为性能瓶颈。mimalloc 的解决方案是让每个线程拥有自己独立的堆——thread-local heaps。这样分配和释放大多数时候只需要访问本地数据结构,完全避免了锁竞争。这个设计被称为"per-thread local heaps",是 mimalloc 高性能的关键之一。
从代码规模看,mimalloc 约 12K 行 C 代码,这个规模对于一个生产级别的内存分配器来说相当克制。Daan Leijen 在设计中特别强调了"clear data structures"——清晰的数据结构。这不仅有利于代码维护,也使得内存布局更加可预测,有助于减少碎片化。在内存碎片化这个老问题上,mimalloc 通过 free list sharding 和 page stealing 等机制来缓解。前者将不同大小的内存块分开管理,后者允许线程在需要时从其他线程的本地堆中"偷"内存页面,实现高效的跨线程内存共享。
实际应用是最好的背书。NoGIL CPython 3.13+ 采用了 mimalloc 作为默认分配器,这对 Python 的性能提升有显著帮助。Unreal Engine 和《死亡搁浅》游戏同样在使用 mimalloc。GitHub 上超过 12K stars 的成绩也证明了社区对它的认可。
mimalloc 另一个值得关注的设计目标是提供"bounded worst-case allocation times"。对于实时系统或者需要确定性的场景来说,这一点比平均性能更重要。传统的内存分配器在极端情况下可能出现较长的分配延迟,而 mimalloc 通过其数据结构设计将最坏情况控制在可预测范围内。
作为一种 drop-in replacement for malloc/free,mimalloc 的集成成本很低。不需要修改现有代码,只需要链接新的分配器即可。这对于想要尝试新技术但又不想大规模重构的项目来说是个好消息。
来源:Microsoft Research (https://www.microsoft.com/en-us/research/blog/mimalloc-a-high-performance-scalable-memory-allocator-for-the-modern-era/)