大纲:
- sds结构
- sds优势
一、sds结构
sds结构
struct sdshdr { int len;//数组中已使用的长度 int free;//数组中未使用的长度 char buf[];//字节数组 }
c语言以' '空字符串表示结尾。用N+1个字符组数长度可以表示N长度的字符串。
二、sds优势
相较于c语言字符数组sds有以下优势
1.常数复杂度获取字符串长度
2.杜绝缓冲区溢出
字符串在拼接操作时,当free长度小于待拼接字符串长度时,直接拼接的话就会产生缓冲区溢出
字符串在进行截断操作时,直接截断字符串会产生内存泄漏
3.减少修改字符串带来的内存重分配
时空间预分配(一次性数组翻倍,超过1m时每次增加1m)
惰性空间释放策略(不释放内存增加free)
4.二进制安全
可保存除字符串以外的其他类型数据如图片、音乐等。
SDS 所有API都会以处理二进制的方式处理SDS存在buf数组里的数据
5.兼容部分c字符串的函数