Redis原始碼 資料結構之Adlist雙端鍊錶

2021-06-26 04:10:41 字數 993 閱讀 5556

鍊錶節點定義:

typedef struct listnode  listnode;
鍊錶定義:

typedef struct list  list;
其中的三個函式指標先不用管,後面遇到了再看具體是幹什麼的,另外還實現了乙個迭代器,有點c++的味道在裡面

typedef struct listiter  listiter;
鍊錶三要素,建立,插入,和刪除

list *listcreate(void)

插入分為從頭部插入和尾部插入,源**實現頭部都有非常清晰的注釋,告訴這個函式的一些細節,作者很是用心:

list *listaddnodehead(list *list, void *value)

else

list->len++;

return list;

}

釋放記憶體

void listrelease(list *list)

free(list);

}

迭代器的建立,以後可以效仿這種做法,迭代器分方向:

/* returns a list iterator 'iter'. after the initialization every

* call to listnext() will return the next element of the list.

* * this function can't fail. */

listiter *listgetiterator(list *list, int direction)

leveldb原始碼 資料結構之Arena

leveldb中的記憶體管理主要是通過arena。arena管理記憶體的思想是用乙個vector來管理申請的block array of new allocated memory blocks std vectorblocks 每個block的大小為4096byte。用char 型別的alloc p...

Redis原始碼 dict資料結構(實現)

本文分析的是src dict.c檔案。從結構上來說,可以分為 1.私有函式 以下劃線開頭的一般都是,一般都是一些輔助函式 2.公開api。從功能來說,可以分為 1.dict初始化 析構 2.元素操作 查詢 刪除 插入 替換 修改值 清空資料 3.遍歷dict,迭代器相關 比如需要持久化雜湊表的資料時...

Redis原始碼學習4 基本資料結構之字典

redis是乙個鍵值對資料庫,在很多地方用到字典。redis 字典的實現採用的是比較經典的雜湊表方式實現的。貌似跟 memcached 的方法有點像,很久之前看過部分 memcached 現在忘得差不多了。redis 的字典定義如下 cpp view plain copy 字典 每個字典使用兩個雜湊...