我有一个分配大量内存的应用程序,我正在考虑使用一种比malloc更好的内存分配机制。
我的主要选项是:jemalloc和tcmalloc。使用它们中的任何一个是否有任何好处?
http://locklessinc.com/benchmarks.shtml中的某些机制(包括作者的专有机制-无锁)之间有很好的比较
并提到了它们各自的优缺点。
鉴于这两种机制都是活跃的,并且会不断完善。是否有人对这两者的相对表现有任何见识或经验?
最佳答案
如果我没记错的话,主要区别在于多线程项目。
这两个库都试图通过让线程从不同的缓存中选择内存来取消对内存获取的争用,但是它们有不同的策略:
jemalloc
(Facebook使用)维护每个线程的缓存tcmalloc
(来自Google)维护着一个缓存池,线程对缓存建立了“自然的”亲和力,但是可能会改变如果我没记错的话,这再次导致了线程管理方面的重要区别。
如果线程是静态的(例如使用池),则
jemalloc
更快创建/销毁线程时
tcmalloc
更快还有一个问题是,由于
jemalloc
旋转新的缓存以容纳新的线程ID,因此线程的突然尖峰将在随后的平静阶段为您提供(主要是)空的缓存。结果,在一般情况下,我建议使用
tcmalloc
,并为非常特定的用途保留jemalloc
(在应用程序生存期内线程数量的较小变化)。