Redis SDS簡單動態字符串

結構體定義

本質上說就是用C語言來實現基本的面向對象,來對底層的字符串進行表示,方便上層使用,爲調用者減少負擔。

typedef char *sds;

struct sdshdr {
    int len;
    int free;
    char buf[];
};

舉例常用操作:

static inline size_t sdslen(const sds s) {
    struct sdshdr *sh = (void*)(s-(sizeof(struct sdshdr)));
    return sh->len;
}

一般來說sizeof(int)佔用4個字節,因此sizeof(struct sdshdr)佔用8個字節,也就是說char buf[]不佔用字節,這是編譯器直接得出的結果。

因此通過結構體中buf的首地址,減去sizeof(struct sdshdr)8個字節,就可以得到結構體實例的首地址,這樣就可以訪問結構體實例中的成員變量。

字符串的各種操作

有了如上結構體的定義,不用看源代碼,就基本就明白了實現思路。內部利用len和free兩個變量來記錄已使用空間和未使用空間, 動態的來管理buf。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章