开发者社区> 问答> 正文

由于Redis底层使用C语言实现,为什么不用C语言的字符串呢?

已解决

由于Redis底层使用C语言实现,为什么不用C语言的字符串呢?

展开
收起
游客lmkkns5ck6auu 2022-10-11 20:26:10 604 0
1 条回答
写回答
取消 提交回答
  • 推荐回答

    a)低复杂度获取字符串长度

    由于len存在,可以直接查出字符串长度,复杂度O(1);如果用c语言字符串,查询字符串长度需要遍历整个字符串,复杂度为O(n);

    b)避免缓冲区溢出

    进行两个字符串拼接c语言可使用strcat函数,但如果没有足够的内存空间。就会造成缓冲区溢出;而用SDS在进行合并时会先用len检查内存空间是否满足需求,如果不满足,进行空间扩展,不会造成缓冲区溢出;

    c)减少修改字符串的内存重新分配次数

    C语言字符串不记录字符串长度,如果要修改字符串要重新分配内存,如果不进行重新分配会造成内存缓冲区泄露。以上内容摘自《阿里开发者手册-Redis专题》电子书,点击https://developer.aliyun.com/ebook/download/7770 可下载完整版

    2022-10-12 23:29:23
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
阿里云开发者社区官方技术圈,用户产品功能发布、用户反馈收集等。
问答排行榜
最热
最新

相关电子书

更多
Redis集群演化的心路历程——从2.x到3.0时代 立即下载
微博的Redis定制之路 立即下载
云数据库Redis版的开源之路 立即下载