redis数据结构-动态字符串sds

大纲:

  1. sds结构
  2. 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字符串的函数

 

原文地址:https://www.cnblogs.com/liuboyuan/p/14645508.html