底层数据结构-sds
-
简单动态字符串,最常用
-
结构定义
//N可取8、16、32、64 sdshdrN { uintN_t len; uintN_t alloc; unsigned char flags; char buf[]; }- 字段解释
len表示字符串长度alloc表示未使用的剩余字节数flags是8位二进制,低3位表示头部类型,高5位未使用buf保存字符串的每个元素
- 字段解释
-
好处
-
1、记录了长度
- 获取长度时,直接拿而不用遍历数
- 拼接字符串时,可先算出最终长度,判断分配空间够不够
-
2、避免了修改时多次分配内存
- 空间预分配:每一次追加字符时,都会多分配一倍的追加后长度,等下次追加就不用重新分配,这个一倍最多是1M
- 惰性空间释放:每一次缩短字符串,都不立即回收内存,而是记录在alloc属性中,等待后续使用(当然也有API可以主动去释放)
-
3、二进制安全
- 不是用C语言的
\0作为结尾,而是用长度判断结尾,因此可以存储二进制数据,比如图片也可以存
- 不是用C语言的
-