我有一个分配大量内存的应用程序,我正在考虑使用一种比malloc更好的内存分配机制。
我的主要选择是:jemalloc和tcmalloc。使用它们中的任何一个有什么好处吗?
http://locklessinc.com/benchmarks.shtml中的某些机制(包括作者的专有机制- 无锁)之间有很好的比较, 并提到了每种机制的利弊。
鉴于这两种机制都是活跃的,并且会不断完善。是否有人对这两者的相对表现有任何见识或经验?
如果我没记错的话,主要区别在于多线程项目。
这两个库都尝试通过让线程从不同的缓存中选择内存来取消对内存获取的争用,但是它们有不同的策略:
jemalloc
tcmalloc
如果我没记错的话,这再次导致了线程管理方面的重要区别。
还有一个问题是,由于jemalloc旋转新的缓存以容纳新的线程ID,因此线程的突然尖峰会使您在随后的平静阶段中拥有(大部分)空的缓存。
因此,tcmalloc在一般情况下,我会建议使用,并保留jemalloc用于非常特定的用途(在应用程序的生命周期内,线程数量的变化很小)。