TcMalloc的介紹以及Windows下安裝使用

來源:互聯網
上載者:User

標籤:des   style   blog   http   使用   os   

下文轉自http://www.cnblogs.com/xsln/p/Introduction_TcMalloc.html

需要注意的問題請直接看最後面。

介紹:

  TcMalloc(Thread-CachingMalloc)是google-perftools工具中的一個記憶體管理庫,與標準的glibc庫中malloc相比,TcMalloc在記憶體配置的效率和速度上要高很多,可以提升高並發情況下的效能,降低系統的負載。

  TcMalloc比glibc的malloc具有更高的效率。如在主頻為2.84GH的pc上,Glibc的malloc需要使用300ns的時間來執行malloc/free對,而tcmalloc只需要50ns來完成相同的操作(資料來自官方文檔)。

  TcMalloc使用線程記憶體池的方法,小對象(<=32K)是在記憶體池中進行分配,使用分配較多的記憶體空間來最佳化分配時間,並定時進行記憶體回收操作。而大對象(>32K)則直接在全域控制堆中分配。Tcmalloc可以有效減小多線程間的鎖爭用問題,對於小對象,甚至可以實現0爭用。

 

Windows下安裝使用:

  gperftools可以在VC++ 7.1(Visual Studio 2003)或以後的版本中運行。

  首先在官網下載並解壓gperftools,為:http://code.google.com/p/gperftools/downloads/list  筆者下載的是:gperftools-2.1.zip

  此壓縮包內含README_windows.txt說明文檔,該文檔包含詳細使用教程。

  開啟並編譯gperftools-2.1目錄下的gperftools.sln,編譯完成後會產生多個用於測試的exe檔案,你可以手動執行這些檔案檢測在你的機子上是否全部通過。  It will also create two binaries, nm-pdb and addr2line-pdb, which you should install in the same directory you install the ‘pprof‘ perl script.(說明文檔中的內容,筆者沒有碰這兩個檔案)

  編譯通過後,在Release/Debug目錄下產生libtcmalloc_minimal[-debug].dll和對應的lib檔案。使用這兩個檔案即可實現對其他工程中malloc/new的替換。

  筆者使用的環境是VS2005,要使用此DLL,你需要添加以下行到工程中:"libtcmalloc_minimal.lib" /INCLUDE:"__tcmalloc",設定如:

  直觀但不全面的測試:  
#include <Windows.h> #include <iostream>#define COUNT 1000*1000void func(){    size_t j = 0;    for (size_t i = 0; i < COUNT; ++i)    {        if (j > 1001)        {            j = 0;        }        int * pInt = (int*)malloc(i * sizeof(int));        free(pInt);    }}void main(){    DWORD tStart, tEnd;    tStart = timeGetTime();    func();    tEnd = timeGetTime();    printf("%lu\n", tEnd - tStart);}

  對於以上代碼,在不使用tcmalloc(將__tcmalloc標誌去掉)時,已耗用時間需要10000多毫秒(實測14846),而在使用tcmalloc後,已耗用時間僅需100多毫秒(實測151)。

   留意:  另外,對於Windows,筆者在gperftools-2.1目錄下的INSTALL檔案中發現如下需要留意的文字,如由需要,請自行到INSTALL檔案中尋找並詳細閱讀:

** Windows (MSVC, Cygwin, and MinGW):

Work on Windows is rather preliminary: we haven‘t found a good way
to get stack traces in release mode on windows (that is, when FPO
is enabled), so the heap profiling may not be reliable in that
case. Also, heap-checking and CPU profiling do not yet work at
all. But as in other ports, the basic tcmalloc library
functionality, overriding malloc and new and such (and even
windows-specific functions like _aligned_malloc!), is working fine,
at least with VC++ 7.1 (Visual Studio 2003) through VC++ 10.0,
in both debug and release modes. See README.windows for
instructions on how to install on Windows using Visual Studio.

 

 

TcMalloc的相關文檔地址:http://goog-perftools.sourceforge.net/doc/tcmalloc.html

            http://dirlt.com/tcmalloc.html

 

注意:

需要注意的是最好是自己到http://code.google.com/p/gperftools/ 上下載最新版的gperftools而不是使用下文作者提到的2.1版本。

目前最新版為:

2.1版本可能會對新版vs(如2012)不太相容。(到上面的官方地址查看gperftools更新日誌似乎能得到證實)

雖然筆者曾用簡單程式實測在VS2012環境下gperftools-2.1(對應編譯成2012版本)可以對malloc、free、new、delete進行管理,但是筆者將其使用到大型程式上會出現卡死的情況,原因不明,但在google搜過有網民表示可能是由於delete/delete[]引起的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.