由于C语言使用字符数组表示字符串,出现以下问题:
1.无法轻易获得字符串长度
2.拼接或缩短字符串必然需要内存重分配,否则可能会缓冲区溢出
而redis作为数据库,需要频繁进行以上两操作,故出现sds。
sds结构体:
len //常数复杂度获得字符串长度
free //减少拼接或缩短字符串内存重分配次数,不会造成缓冲区溢出
//1.拼接时空间预分配:先检查free是否足够,若不够,计算拼接后的长度,更改len,len<1M,更新free使其=len。len>=1M,更新free=1M
//2.缩短时惰性空间释放:避免缩短进行内存分配,缩后只是用free记录下来新的未使用字节数。
char buf[]