Redis之SDS

SDS:

主要由free、len、buf三个组成,分别记录剩余的长度、当前字符串的长度和字符串。它是通过预分配和惰性空间释放来减少内存分配操作,

预分配策略:每次存字符串的时候如果小于1m则分配与字符串相同的大小,额外加一个1位的\0结尾符,如果是2k长度字符串则问4k + 1大小的内存空间。如果超过1m,加入说30m,只会多给出来1m空间,外加\0,也就是30m+1m+1b

惰性空间释放:指当某个值长度由大变小时,不会立即释放空间,而是会把剩余的空间size记录到free里,在下次使用时可以先判断是否够用,同时在适当的时候也会自动调用sdsfreesdsfree来释放空间。减少空间浪费。

len本身可以减少每次计算sds字符串长度。同时还能杜绝缓冲区溢出。每次修改时均可以调用sdslen来判断当前使用的空间及剩余的空间。同时len也保证了二进制安全。

总结:相比较c,sds有以下优点:

1、简化常用获取字符串的复杂度

2、杜绝缓冲溢出

3、减少修改字符串长度时重新分配内存的次数。

4、二进制安全。

5、兼容部分c字符串函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值