Comparison of Malloc() Algorithms
2 days ago
- malloc()中的arena架构通过提供每线程或每CPU内存池来解决多线程程序中的可扩展性问题,减少全局堆上的争用。
- malloc()前端的演变从空闲链表发展到线程特定的本地分配缓冲区(TLAB)和arena内存池,提高了性能并减少了同步开销。
- 后端演进包括伙伴算法、BIPOP表和段队列等技术,以有效管理并将碎片化内存返回给操作系统。
- 在各种分配器中,jemalloc、mimalloc和snmalloc是性能最好的;jemalloc提供多arena和线程亲和性,mimalloc最小化原子操作,snmalloc提供NUMA感知和出色的可扩展性。
- 选择分配器的关键考虑因素包括工作负载类型:jemalloc适用于高度争用的多线程环境,mimalloc适用于低延迟应用,tcmalloc适用于小对象繁重的工作负载,snmalloc适用于NUMA感知和安全导向的系统。