二 記憶體管理

2022-08-24 06:09:13 字數 686 閱讀 9491

1、前言

redis記憶體分配庫支援jemalloc(linux預設)、tcmalloc、libc(非linux預設),編譯方式參考makefile。

三種記憶體分配方式的比較待以後總結——>?

2、adlist.h/adlist.c

基本資料結構是帶頭結點的雙向鍊錶(非迴圈),呼叫依賴zmalloc.h/zmalloc.c

typedef struct

listiter listiter;

typedef

struct

list list;

list代表乙個鍊錶,dup/free/match代表對鍊錶結點資料的操作函式,即對listnode中value的操作函式。dup代表對value的複製函式,free代表釋放value記憶體的函式,match代表對value進行比較的函式。

listiter代表乙個迭代器,正向或反向遍歷鍊錶。

3、zmalloc.h/zmalloc.c

附註:兩次巨集操作,可以防止一次巨集未對s中使用的巨集進行替換,如下所示(好久沒看,忘記是不是這個意思了?)

#define __xstr(s) __str(s)

#define __str(s) #s

主要是巨集定義,執行效率高。實際執行依賴於所選擇的記憶體分配庫和作業系統平台。

未完待續。。。

記憶體管理二

發現兩篇記憶體池的博文,博文位址如下,寫的很好,能避免記憶體碎片和記憶體洩露問題,比我這個玩具 要好很多,大家可以看看 在我們做專案的時候,經常會分配了記憶體,然後卻忘了釋放,造成記憶體洩漏的問題。以下 可以實現在 退出的時候自動釋放之前申請但未釋放的記憶體。其原理是 用乙個雙向鍊錶維護申請的記憶體...

linux c 記憶體管理(二)

3.指標與陣列的比較 不同點 陣列 要麼在驚天儲存區域被建立 如全域性陣列 要麼在棧上被建立。陣列名對應著 而不是指向 一塊記憶體,其位址與容量在生命週期內保持不變,只有陣列的內容可以改變。指標 可以隨時指向任意型別的記憶體塊,它的特徵是 可變 所以我們常用指標來操作動態記憶體。兩者特徵比較的例子 ...

Objective C 記憶體管理 二

assign的屬性內部實現 setter方法 setter方法 property nonatomic,assign nsstring name void setname nsstring name getter方法 getter方法 nsstring name 觀察下面 會出現什麼問題?nsstri...