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

 

posted @ 2018-10-16 00:15  osbreak  阅读(245)  评论(0编辑  收藏  举报