說下Redis採用不同記憶體分配器

2022-03-28 15:39:23 字數 1398 閱讀 2506

參考文章:

我們知道redis

並沒有自己實現記憶體池,沒有在標準的系統記憶體分配器上再加上自己的東西。所以系統記憶體分配器的效能及碎片率會對redis造成一些效能上的影響。

在redis的 zmalloc.c 原始碼中,我們可以看到如下**:

49 #if defined(use_tcmalloc)

50 #define malloc(size) tc_malloc(size)

51 #define calloc(count,size) tc_calloc(count,size)

52 #define realloc(ptr,size) tc_realloc(ptr,size)

53 #define free(ptr) tc_free(ptr)

54 #elif defined(use_jemalloc)

55 #define malloc(size) je_malloc(size)

56 #define calloc(count,size) je_calloc(count,size)

57 #define realloc(ptr,size) je_realloc(ptr,size)

58 #define free(ptr) je_free(ptr)

59 #endif

從上面的**中我們可以看到,redis在編譯時,會先判斷是否使用tcmalloc

,如果是,會用tcmalloc對應的函式替換掉標準的libc中的函式實現。其次會判斷jemalloc

是否使得,最後如果都沒有使用才會用標準的libc中的記憶體管理函式。

參考裡已經列出了安裝tcmalloc的安裝方法,下面我說下jemalloc的安裝方法

tar jxf jemalloc-3.6.0.tar

.bz2

cd jemalloc-3.6.0

./configure

make use_jemalloc=yes force_libc_malloc=yes      #指定用jemalloc

make

install

cp -a /root/jemalloc-3.6.0/include/jemalloc/*

/usr/include/

cd ..

cat /etc/ld.so.conf.d/local_lib.conf

echo "/usr/local/lib" > /etc/ld.so.conf.d/local_lib.conf

/sbin/ldconfig

#至於是選擇tcmalloc還是jemalloc,看個人喜好了

ptmalloc 是glibc的記憶體分配管理模組

tcmalloc   是google的記憶體分配管理模組

jemalloc   是bsd的記憶體分配管理模組

採用不同的方法建立字型

採用不同的方法建立字型 2007 12 15 10 08 例3.8 編寫乙個單文件的應用程式li3 8,採用不同的方法建立字型,並根據建立的字型輸出不同的文字。2 選擇專案工作區的classview,展開cli3 8view類,開啟成員函式ondraw 3 在函式ondraw 中新增如下 void ...

採用不同方式讀取資料流

一般我們用行輸入操作符 讀取資料流,如果是標量上下文,就返回一行,如果是列表上下文,就返回資料流中所有的資料。總體而言,一次讀取一行的方式在時間和記憶體的開銷上效率最高的。my contents do 可以選用file slurp 模組替代我們完成。use file slurp my text re...

採用不同的方法實現回文數的判斷

題目要求 採用集中你認為可行的方法實現回文數的判斷 輸入 123321 輸出 yes 輸入 122 輸出 no 法1 採用整數的方法,將乙個整數輸入,然後將整數反轉,判斷反轉後的整數是否和原來的書相等,但是這個方法沒有考慮到若該數很大超過了計算機的最大儲存範圍,那麼就會溢位啊。如下 include ...