开源库jemalloc简介
jemalloc是通用的malloc(3)實現,它強調避免碎片和可擴展的并發支持。它的源碼位于https://github.com/jemalloc/jemalloc,最新穩定版本為5.2.1。
glibc的內存分配算法是基于dlmalloc實現的ptmalloc;tcmalloc是Google開發的內存分配器;jemalloc在Facebook公司內部很多項目中使用。
有時在Linux上使用glibc頻繁調用malloc/free時會導致偽”內存泄漏”,此時可試試jemalloc,參考:https://zhuanlan.zhihu.com/p/270913476
windows上使用vs2017編譯x64 jemalloc源碼操作步驟:直接打開源碼下的jemalloc_vc2017.sln編譯,會報找不到jemalloc_preamble.h文件
(1).從http://www.cygwin.com/ 下載setup-x86_64.exe并安裝,若下載慢,使用國內的鏡像地址,如阿里云鏡像http://mirrors.aliyun.com/cygwin/,安裝包至少包括autoconf、autogen、gawk、grep、sed;
(2).將C:\cygwin64\bin加入系統環境變量;
(3).打開”適用于VS 2017的x64本機工具命令提示”(注意:編譯x86和x64選擇不同,編譯x86,打開”x86 Native Tools Command Prompt for VS 2017”),并將其定位到jemalloc-5.2.1目錄下,執行:$ sh -c "CC=cl ./autogen.sh";
(4).打開jemalloc_vc2017.sln編譯即可生成jemalloc動態庫和靜態庫。
Linux上編譯jemalloc源碼操作步驟,依次執行如下命令即可:
./configure --with-jemalloc-prefix=je_
make
以下是測試代碼:
#include "funset.hpp"
#include <iostream>
#include <jemalloc/jemalloc.h>// define to jemalloc
#define malloc(size) je_malloc(size)
#define calloc(nmemb, size) je_calloc(nmemb, size)
#define realloc(ptr, size) je_realloc(ptr, size)
#define free(ptr) je_free(ptr)int test_jemalloc()
{char* a = static_cast<char*>(malloc(10));if (!a) {fprintf(stderr, "fail to malloc\n");return -1;}free(a);return 0;
}
在windows下,debug模式,設置斷點,可直接跟進源碼中,如下圖所示,Linux下,可通過gdb跟進:
GitHub:https://github.com/fengbingchun/Messy_Test
總結
以上是生活随笔為你收集整理的开源库jemalloc简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker客户端常用命令整理
- 下一篇: Docker容器中数据两种持久化存储方式