Gperftdolsのtcmallocの紹介と使用

4356 ワード

TcMalloc(Thread-CachingMalloc) google-perftools           ,    glibc  malloc  ,TcMalloc                ,             ,       。
Google-perftools      :http://code.google.com/p/google-perftools/,     TcMalloc、heap-checker、heap-profiler cpu-profiler 4   。    TcMalloc              。
 :          ,              ,                  。
         http://goog-perftools.sourceforge.net/doc/tcmalloc.html
概要
TcMalloc    Google   , glibc malloc        。     ptmalloc2  300ns    malloc free , TcMalloc  50ns     malloc free 。
TcMalloc                 ,           。
TcMalloc                Cache,           Cache   ,         ,     Cache              。
TcMalloc    (<=)32K    ,              (4K)       ,             。
TcMalloc                  ,             ,            。
インストール
Linux tcmalloc       :
1)  Google            ,       2.0;
2)        
# unzip gperftools-2.0.zip   
# tar zxvf gperftools-2.0.tar.gz
3)      
# cd gperftools-2.0
# ./ configure --disable-cpu-profiler --disable-heap-profiler--disable-heap-checker 
--disable-debugalloc--enable-minimal
             tcmalloc_minimal   ,        ,    :
# ./configure
# ./configure -h        。
# make&& make install
        tcmalloc_minimal            :
# cplib/tcmalloc_minimal.so.0.0.0 /usr/local/lib
       tcmalloc:
# ls –s /usr/local/lib/libtcmalloc_minimal.so.0.0.0/usr/local/lib/libtcmalloc.so
      ,    tcmalloc          :
# exportLD_PRELOAD=”/usr/local/lib/libtcmalloc.so
  losf          tcmalloc :
# lsof -n | greptcmalloc
 Linux    tcmalloc    , Windows   VS(2003    )      gperftools.sln    。
使用
 libtcmalloc.so/libtcmalloc.a      ,    LD_PRELOAD=libtcmalloc.so。       tcmalloc             malloc、free、realloc、strdup      。            :
 TCMALLOC_DEBUG=<level>      ,   1-2
 MALLOCSTATS=<level>             ,   1-2
 HEAPPROFILE=<pre>                 
 HEAPCHECK=<type>      ,type=normal/strict/draconian
TcMalloc             ,           :
1) tcmalloc       ,     tcmalloc         ;
2)  LD_PRELOAD=”libtcmalloc.so”/HEAPCHECK=normal,           
      ,               :
1)       ,         : HEAPCHECK=normal /bin/ls
2)           ,                ,    :
HeapProfileLeakCheckerchecker("foo"); //     
Foo();  //        
assert(checker.NoLeaks());  //     
  checker        ,   checker.NoLeaks       ,      ,             ,NoLeaks    false,              pprof            。
       :
 #LD_PRELOAD=libtcmalloc.so HEAPCHECK=strict HEAPPROFILE=memtm ./a.out
             ,     ,pprof          ,      ,                        。
 #pprof --base=profile.0001.heap     profile.0002.heap
         ,           :
void *mark =HeapLeakChecker::GetDisableChecksStart();
<leaky code> //         
HeapLeakChecker::DisableChecksToHereFrom(mark);
  :   libc                。
  :             ,  :char *str = new char[100]; delete str;。