1、前言
redis記憶體分配庫支援jemalloc(linux預設)、tcmalloc、libc(非linux預設),編譯方式參考makefile。
三種記憶體分配方式的比較待以後總結——>?
2、adlist.h/adlist.c
基本資料結構是帶頭結點的雙向鍊錶(非迴圈),呼叫依賴zmalloc.h/zmalloc.c
typedef structlistiter 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...