强大的多线程内存分配器jemalloc

文章介绍了jemalloc内存分配器的设计理念及其相对于phkmalloc的优势。jemalloc为了解决多线程应用下的内存分配效率问题而设计,通过多分配区域来提高并发性。尤其在多处理器系统上,jemalloc能显著提升性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目前使用的malloc() 库,调用的是 Poul-Henning Kamp 的 phkmalloc,这一实现已经有了近十年历史。这一实现设计于内存稀缺的时代,在内存分配优先级的考虑上与现在不同,而且当时多线程仍是一个学术问题。尽管如此,它仍然是相当流行的 malloc()实现,并广泛应用于所有的BSD中,甚至某些Linux发行版也使用了。
由于在多处理器系统中运行多线程应用时,它的缺乏效率,一个新的userland内存分配器被创建出来,并被它的创建者Jason Evans命名为jemalloc。它在计算机速度和内存可用性上的改进意味着,相对于phkmalloc——仅在内存使用上保守时使用,jemalloc 更适用于复杂情况,以及在底层属性上——比如CPU缓存位置和并发处理——需要记账时。 (此处似乎需要调整翻译)
这个allocator最终成为这个样子:使用多allocation arenas帮助并发性,针对多线程进行了优化。在单处理器的系统上,只有一个arena,但是在多处理器,或者则多核系统上,就分配4倍于处理器个数的arena。Allocations are divided into broad classes based on their size and those classes are further subdivided. 测试显示,jemalloc显然在多线程应用(比如MySQL)以及制造许多小allocation的应用上面有更佳表现。

 


下面是一片Paper
http://people.freebsd.org/~jasone/jemalloc/bsdcan2006/jemalloc.pdf

 

http://www.facebook.com/notes/facebook-engineering/scalable-memory-allocation-using-jemalloc/480222803919

 

 

类似的还有一个google开发的tcmalloc
http://code.google.com/p/google-perftools/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值