自学内容网 自学内容网

【Redis】字符串原理--简单动态字符串SDS

一.SDS定义

  1. free 属性值为0,标识SDS没有分配任何未使用空间。
  2. len  属性值为5,标识SDS保存了一个5字节长度的字符串。
  3. buf  属性是一个char类型数组,数组的前5个字节保存了,'R' 'e' 'd' 'i' 's' 五个字符,最后一个保存空字符串  '\0'。

这个示例是 SDS为buf数组分配了五字节未使用空间,所以它的未使用空间值为5

二.SDS与C字符串的区别

序号C字符串SDS
1获取字符串长度的复杂度为 O(N)获取字符串长度的复杂度为 O(1)
2API是不安全的,可能会造成缓冲区溢出API是安全的,不会造成缓冲区溢出
3修改字符串长度N次必然需要执行N次的内存重分配

修改字符串长度N次最多需要执行N次内存重分配

  1.空间预分配

  2.惰性空间释放

4只能保存文本数据可以保存文本或者二进制数据(二进制安全)
5可以使用所有<string.h> 库中的函数可以使用一部分<string.h>库中的函数

原文地址:https://blog.csdn.net/sucess_zhang/article/details/136023103

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!