安装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)来保证分配的内存有更好的空间的局部性,从而提升性能。