SDS 动态字符串
SDS定义
struct sdshdr {
int len
int free
char buf[];
}
- free: 剩余空间大小
- len: 字符串长度
- buf: 字符串内容
SDS 与C语言字符串区别
- 常数复杂度获取字符串长度
- 杜绝缓冲区溢出:API会检查SDS的空间是否满足修改所需要求,如果不满足的话,会自动将SDS空间扩展至 所需空间大小,然后再执行实际修改操作。
- 减少修改字符串时带来的内存重新分配次数:
- 空间预分配
- 如果SKS修改之后,长度小于1M,程序分配和len同样大小的未使用空间,len和free相同
- 如果修改后长度大于等于1M,程序会分配1M的未使用空间,
- 惰性释放空间
- 缩短SKS的字符串时,不会立即释放free。需要时再释放
- 空间预分配
- 二进制安全
- C语言字符串除结尾外不能出现空格
- 兼容部分C字符串函数