Linux性能学习(2.5):内存_Ptmalloc与TCMalloc

参考资料:
1.庄明强老师的《Glibc内存管理》
2.https://google.github.io/tcmalloc/tuning.html

在上篇文章中,了解到目前的Glibc使用的是Ptmalloc,另外还有一个比较主流的内存池TCMalloc,也一并介绍下。

TCMalloc 是 Google 开发的内存分配器,可以替换c 的 malloc () 和 c + + 操作符 new 的实现,用于降低频繁分配、释放内存造成的性能损耗。

TCMalloc相比较Ptmalloc,对于多线程做了优化,减小了多线程中的锁竞争,为每个线程独立分配内存,无需加锁,所以速度更快,特别是对于小对象的分配基本上不会存在锁竞争;

另外,TCMalloc在小对象的空间效率上会更高,分配N个8字节使用大约8N * 1.01字节的空间,即多用百分之一的空间。而Ptmalloc2中则会为申请的内存加四字节的头,并且还会多分配内存,参考《为什么分配的内存比申请的内存大16个字节》。

所以在多线程、大量的并发线程、小对象内存申请的场景下,TCMalloc的效率会更高。

但是在大于256KB的内存申请上,即中等内存和大内存申请上因为自身的机制,速度反而没有Ptmalloc块。

猜你喜欢

转载自blog.csdn.net/u011003120/article/details/128286743