原创 STL源碼剖析——RB_TREE

花了差不多一個星期的時間讀完了STL紅黑樹的實現,並憑理解自己寫了出來 參考了《算法導論》,教你透徹瞭解紅黑樹,強烈推薦,《STL源碼剖析》 記錄下自己的理解 RB_TREE 紅黑樹優點: 與BST相比插入,查找,刪除在最壞情況下的

原创 Redis源碼剖析——adlist的實現

adlist adlist爲Redis基本數據結構之一,爲雙向鏈表,記錄了鏈表長度,adlist的迭代器記錄了迭代節點和方向,個人覺得實現優於STL的list 幾個重要結構 adlist實現比較精簡,基本上寫過鏈表相關的代碼就能很快寫出所

原创 Redis源碼剖析——內存管理

開始閱讀Redis3.0版本源碼,並以此爲剖析對象,因爲此版本有註釋,並且網上有文章,便於初學者學習參考,瞭解以前的版本才能更好地學習最新的4.x版本 內存管理 Redis的內存管理僅僅對malloc,,free做了一層封裝,並未實現內

原创 《Linux內核設計與實現》讀書筆記——進程管理

進程管理 進程概念 進程:進程是處於執行期的程序以及相關資源的總稱 線程:線程是進程中活動的對象。每個線程都有獨立的程序計數器、進程棧和寄存器。內核調度的是線程而不是進程 內核並不區分進程和線程,只是創建時傳遞給創建函數的參數不一樣

原创 Redis源碼剖析——skiplist的實現

跳躍表skiplist 跳躍表是一種有序的數據結構,它通過用空間換時間,在每個節點中維持多個指向其他節點的指針,從而達到快速訪問的目的。跳躍表插入、刪除的平均複雜度爲O(logN),最壞爲O(N),可以和紅黑樹相媲美,但是在實現起來,比紅

原创 Variadic templates

Variadic Templates 可變參數模板,函數的參數可以有任意多個,參數的類型任意 1. 實現函數遞歸調用 實現打印任意多個不同類型參數 #include <iostream> using namespace std; //無

原创 Redis源碼剖析——SDS的實現

SDS的實現 SDS即簡單動態字符串,爲Redis的幾大基本數據結構之一,有廣泛的用途 基本函數總覽 函數 功能 複雜度 sdsnewlen 由給定字符串創建SDS O(N) sdslen 返回字符串長度 O(1)

原创 Redis源碼剖析——列表對象

列表對象 列表對象的編碼爲ziplist或linkedlist ziplist編碼的列表對象 當滿足下面兩個條件時列表對象用ziplist編碼 1. 列表對象保存的所有字符串元素的長度都小於等於64字節 2. 元素數量小於等於512

原创 Redis源碼剖析——哈希對象

哈希對象 哈希對象的編碼可以爲ziplist或者hashtable ziplist編碼的哈希對象 滿足下面兩個條件時,哈希對象使用ziplist編碼 1. 所有鍵值對的鍵和值的字符串長度都小於等於64字節 2. 鍵值對數量小於512

原创 Redis源碼剖析——有序集合對象

有序集合對象 有序集合的對象的編碼可以爲ziplist或者skiplist ziplist實現有序集合 當滿足下面兩個條件時,有序集合的底層數據結構爲skiplist 1. 元素數量小於128個 2. 所有元素成員的長度都小於64字節