結構體定義
本質上說就是用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。