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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值