SDS(simple dynamic string)由Redis构建的简单动态字符串抽象类型
一般c字符串用于字符串字面值,SDS类型用于底层操作
SDS结构定义:
struct sdshdr {
int len;//保存字符串长度,不计空字符
int free;//预留空间
char buf[];//字节数组,存储字符串遵循c以空字符结尾的惯例
};
SDS为减少内存重分配次数,采用如下策略:
1)空间预分配优化策略:如果SDS的len长度小于1M,则分配free与len等同长度,如果SDS的len长度大于1M,则分配free为1M长度
2)惰性空间释放策略:将free把未使用空间记录下来,而非释放掉
SDS二进制安全,使用长度操作字符,而非空字符
SDS对比C字符串优点:
1、常数复杂度获取字符串长度
2、杜绝缓冲区溢出
3、减少内存重分配次数
4、二进制安全
5、兼容部分C字符串函数