结构体定义
本质上说就是用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。