tcmalloc jemalloc 和ptmalloc 對比


ptmalloc 是glibc的內存分配管理

tcmalloc 是google的內存分配管理模塊

jemalloc 是BSD的提供的內存分配管理

三者的性能對比參考從網上的一個圖如下:

image

自己測試了一下:

代碼如下:

   1: #include <iostream>                                                                                                      
   2: #include <map>
   3:  
   4: using namespace std;
   5: int main(int argc, char**argv) {
   6:   cout << "Hello world" << endl;
   7:   std::map<int,int> int_map;
   8:   for (int i = 0; i < 10000000; ++i) {
   9:     int_map.insert(std::map<int,int>::value_type(i,i));
  10:   }
  11:   return 0;
  12: }

都是執行一個map insert 100W次操作。

為了測試方便,我們生成了3個binary,分別鏈接使用jemalloc和tcmalloc 和ptmalloc的庫做對比:

ldd jemalloc_test
    linux-vdso.so.1 =>  (0x00007fffc6fc3000)
    libjemalloc.so.1 => /usr/local/lib/libjemalloc.so.1 (0x00007f45181aa000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f4517ea4000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4517c1e000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f4517a08000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4517673000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4517454000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f4517250000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f45183f2000)

ldd tcmalloc_test
    linux-vdso.so.1 =>  (0x00007fff94160000)
    libtcmalloc.so.0 => /usr/lib/libtcmalloc.so.0 (0x00007f20107dc000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f20104d6000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f2010250000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f201003a000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f200fca5000)
    libunwind.so.7 => /usr/lib/libunwind.so.7 (0x00007f200fa8b000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f2010a68000)

ldd ptmalloc_test
    linux-vdso.so.1 =>  (0x00007fff08501000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f7e6c156000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7e6bed1000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f7e6bcba000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7e6b925000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f7e6c483000)

然后分別執行各程序,使用time統計時間如下:

time./jemalloc_test
Hello world

real    0m9.927s
user    0m9.650s
sys    0m0.250s

time ./tcmalloc_test
Hello world

real    0m9.836s
user    0m9.410s
sys    0m0.410s

time ./ptmalloc_test
Hello world

real    0m11.890s
user    0m11.520s
sys    0m0.360s

 

jemalloc和tcmalloc的性能不分伯仲,而ptmalloc則要低一些。

這里簡單介紹下性能。后面抽時間再介紹下各自的實現原理。

refer: http://blog.csdn.net/yfkiss/article/details/7035579


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM