perftools::tcmalloc
安装libunwind wget http://ftp.yzu.edu.tw/nongnu/libunwind/libunwind-1.1.tar.gz ./configure make make install 安装google-perftools wget -c -O gperftools-2.4.tar.gz https://github.com/gperftools/gperftools/releases/download/gperftools-2.4/gperftools-2.4.tar.gz ./confighre make make install echo "/usr/local/lib" >> /etc/ld.so.conf.d/usr_local_lib.conf
/sbin/ldconfig
#define USE_TCMALLOC_LIB #ifdef USE_TCMALLOC_LIB #include "gperftools/tcmalloc.h" #endif #include <stdio.h> int main(int argc, char* argv[]) { const char* tcVer = tc_version(NULL, NULL, NULL); if (NULL != tcVer) printf("%s \n", tcVer); return 0; }
SRC += main.cpp GCC = g++ FLAG = -ltcmalloc CMS = CMS demo: $(GCC) -o $(CMS) -g $(SRC) $(FLAG) clean: rm CMS
ptmalloc、tcmalloc,jemalloc,mimalloc 1、tcmalloc是Google开发的内存分配器,在Golang、Chrome中都有使用该分配器进行内存分配。有效的优化了ptmalloc中存在的问题。 TCMalloc是专门对多线并发的内存管理而设计的,TCMalloc主要是在线程级实现了缓存,使得用户在申请内存时大多情况下是无锁内存分配。 整个 TCMalloc 实现了三级缓存,分别是ThreadCache(线程级缓存),Central Cache(中央缓存:CentralFreeeList),PageHeap(页缓存),最后两级需要加锁访问。如图为内存分配 2、jemalloc是facebook推出的,目前在firefox、facebook服务器、android 5.0 等服务中大量使用。 jemalloc最大的优势还是其强大的多核/多线程分配能力. 以现代计算机硬件架构来说, 最大的瓶颈已经不再是内存容量或cpu速度, 而是多核/多线程下的lock contention(锁竞争). 因为无论CPU核心数量如何多, 通常情况下内存只有一份. 可以说, 如果内存足够大, CPU的核心数量越多, 程序线程数越多, jemalloc的分配速度越快。 3、mimalloc是微软最近开源的一个malloc实现,其实验数据表明相比于jemalloc、tcmalloc等实现大约快了10%。 其通过将空闲块列表(Free List)进行分片(Sharding)来保证分配的内存有更好的空间的局部性,从而提升性能。