jemalloc是facebook推出的
https://github.com/jemalloc/jemalloc http://jemalloc.net/源碼裡面有INSTALL.md,裡面有安裝說明,但是不可完全參照,需要調整步驟如下:
先準備好gcc編譯環境,然後把docbook-style-xsl依賴庫安裝好。
[root@localhost ]# yum -y install docbook-style-xsl
如果沒有docbook-style-xsl,運作make dist會報錯:
[root@localhost ]# make dist
/usr/bin/xsltproc -o doc/jemalloc.html doc/html.xsl doc/jemalloc.xml
warning: failed to load external entity "/html/docbook.xsl"
compilation error: file doc/html.xsl line 2 element import
xsl:import : unable to load /html/docbook.xsl
make: *** [doc/jemalloc.html] Error 5
正式開始編譯:
chmod -R 777 jemalloc-4.5.0
cd jemalloc-4.5.0
./autogen.sh --with-jemalloc-prefix=je_
make dist
make
make install
最終頭檔案和庫檔案的安裝路徑分别是:
usr/local/include/jemalloc
usr/local/lib
本人環境是CentOS 7.3,gcc版本是4.8.5。
請注意:
(1)chmod這個步驟很重要,否則jemalloc檔案夾下有大量.sh檔案,最終會因為沒有權限而編譯失敗。
(2)./autogen.sh 務必帶上參數!即 "./autogen.sh --with-jemalloc-prefix=je_",否則将來程式設計調用時會報錯,例如:
undefined reference to `je_malloc'
undefined reference to `je_realloc'
CMakeList.txt檔案
cmake_minimum_required(VERSION 2.8)
project(myDemo)
SET(JEMALLOC_INCLUDE_DIR /usr/include/jemalloc)
SET(JEMALLOC_LIB /usr/local/lib)
INCLUDE_DIRECTORIES(${JEMALLOC_INCLUDE_DIR})
LINK_DIRECTORIES(${JEMALLOC_LIB})
#ADD_EXECUTABLE必須在TARGET_LINK_LIBRARIES前面,否則會報錯
ADD_EXECUTABLE(${PROJECT_NAME} main.c)
TARGET_LINK_LIBRARIES(${PROJECT_NAME} jemalloc)
----
引申閱讀TCMalloc
TcMalloc(Thread-CachingMalloc)是google-perftools工具中的一個記憶體管理庫,是以一般提到tcmalloc,其實就是指使用gperftools,編譯tcmalloc也就是編譯gperftools。 與标準的glibc庫中malloc相比,TcMalloc在記憶體配置設定的效率和速度上要高很多,可以提升高并發情況下的性能,降低系統的負載。
TcMalloc比glibc的malloc具有更高的效率。如在主頻為2.84GH的pc上,Glibc的malloc需要使用300ns的時間來執行malloc/free對,而tcmalloc隻需要50ns來完成相同的操作(資料來自官方文檔)。
TcMalloc使用線程記憶體池的方法,小對象(<=32K)是在記憶體池中進行配置設定,使用配置設定較多的記憶體空間來優化配置設定時間,并定時進行垃圾回收操作。而大對象(>32K)則直接在全局控制堆中配置設定。Tcmalloc可以有效減小多線程間的鎖争用問題,對于小對象,甚至可以實作0争用。
TCMalloc是gperftools的一部分,除TCMalloc外,gperftools還包括heap-checker、heap-profiler和cpu-profiler。
https://github.com/gperftools/gperftools https://www.jianshu.com/p/11082b443ddf