第一部分 数据结构与对象
第2章 简单动态字符串SDS
简易结构:
struct sdsstr{
int len; //记录字符串长度
int free; //记录数组剩余空间
char buf[]; //存储字符串的字节数组
}
1. 相比与C字符串(底层维护一个N+1长度的字节数组),SDS更有优势:
1.获取字符串长度简单 复杂度O(1), 而C字符串需要遍历数组统计长度,复杂度O(n)
2.避免了缓冲区溢出(SDS的空间分配策略避免了缓冲区溢出)
3.减少了修改字符串时带来的内存重分配次数(SDS的空间预分配策略,c字符串修改长度都需要内存重分配)
2.两种优化策略: 空间预分配和惰性空间释放
1.空间预分配
用于优化sds字符串的增长操作
1.当对sds操作后,sds的长度小于1M,分配和len长度一样的free空间,此时 len属性的值和free属性的值一样。 (如修改后字符串长度为3,则buf数组实际长度=3+3+1=7,1字节存空字符)