一.SDS定义
- free 属性值为0,标识SDS没有分配任何未使用空间。
- len 属性值为5,标识SDS保存了一个5字节长度的字符串。
- buf 属性是一个char类型数组,数组的前5个字节保存了,'R' 'e' 'd' 'i' 's' 五个字符,最后一个保存空字符串 '\0'。
这个示例是 SDS为buf数组分配了五字节未使用空间,所以它的未使用空间值为5
二.SDS与C字符串的区别
序号 | C字符串 | SDS |
1 | 获取字符串长度的复杂度为 O(N) | 获取字符串长度的复杂度为 O(1) |
2 | API是不安全的,可能会造成缓冲区溢出 | API是安全的,不会造成缓冲区溢出 |
3 | 修改字符串长度N次必然需要执行N次的内存重分配 | 修改字符串长度N次最多需要执行N次内存重分配 1.空间预分配 2.惰性空间释放 |
4 | 只能保存文本数据 | 可以保存文本或者二进制数据(二进制安全) |
5 | 可以使用所有<string.h> 库中的函数 | 可以使用一部分<string.h>库中的函数 |