sds模块的具体实现:

1、sdsnewlen 根据参数生成一个sds字符串

 1 sds sdsnewlen(const void *init, size_t initlen)
 2 {
 3     struct sdshdr *sh;
 4   //如果初始化的内容为NULL,则生成一个内容只有一个\0的串,但是长度不会变,还是传入的长度。zmalloc和zcalloc的功能一样,这个地方为啥还要调用不同的呢。
 5     if (init) {
 6         sh = zmalloc(sizeof(struct sdshdr)+initlen+1);
 7     } else {
 8         sh = zcalloc(sizeof(struct sdshdr)+initlen+1);
 9     }
10     if (sh == NULL) return NULL;//申请失败返回NULL
11     sh->len = initlen;//初始化长度为传入值。
12     sh->free = 0;//设定剩余长度为0
13     if (initlen && init)
14         memcpy(sh->buf, init, initlen);//初始化值
15     sh->buf[initlen] = '\0';填写最后的结尾符
16     return (char*)sh->buf;
17 }

未完待续。。。

转载于:https://www.cnblogs.com/likui360/p/5274041.html

Redis自定义动态字符串(sds)模块(二)相关推荐

  1. Redis内部数据结构详解之简单动态字符串(sds)

    本文所引用的源码全部来自Redis2.8.2版本. Redis中简单动态字符串sds数据结构与API相关文件是:sds.h, sds.c. 转载请注明,本文出自:http://blog.csdn.ne ...

  2. Redis源码初探(1)简单动态字符串SDS

    前言 现在面试可太卷了,Redis基本是必问的知识点,为了在秋招中卷过其他人(虽然我未必参加秋招),本菜鸡决定从源码层面再次学习Redis,不过鉴于本菜鸡水平有限,且没有c语言基础,本文不会对源码过于 ...

  3. Redis数据结构之简单动态字符串SDS

    Redis的底层数据结构非常多,其中包括SDS.ZipList.SkipList.LinkedList.HashTable.Intset等.如果你对Redis的理解还只停留在get.set的水平的话, ...

  4. Redis数据结构——简单动态字符串-SDS

    1.SDS简介: redis没有使用C语言传统的字符串表示(以空字符结尾的字符数组),而是自己构建了一种名为简单动态字符串(SDS)的抽象类型,并将SDS用作redis的默认字符串表示. 除了用来保存 ...

  5. Redis 动态字符串(SDS)底层原理详解

    文章目录 前言 1. 动态字符串 1.1 SDS的数据结构 1.2 SDS 与 C 字符串的区别 1.2.1 常数复杂度获取字符串长度 1.2.2 杜绝缓冲区溢出 1.3 减少修改字符串时带来的内存重 ...

  6. Redis源码剖析(十)简单动态字符串sds

    在对象系统概述中发现,好像所有和字符串有关的内容都有sds的存在,实际上,它是Redis内部对于c字符串的封装,所谓c字符串,其实就是char *,在sds.h头文件中可以清楚的看到它的定义 //sd ...

  7. Redis之简单动态字符串sds

    转载:https://segmentfault.com/a/1190000012262739 redis在处理字符串的时候没有直接使用以'\0'结尾的C语言字符串,而是封装了一下C语言字符串并命名为s ...

  8. Redis笔记之基本数据结构 动态字符串SDS

    简单动态字符串 传统上的C语言的字符串表示是以空字符结尾的字符数组(C字符串),redis自己实现一个动态字符串(SDS),两者之间的区别以及使用SDS的好处有: 结构不同.C字符串以空字符结尾的字符 ...

  9. redis源码学习-03_动态字符串SDS

    概述 简单动态字符串(SDS, Simple Dynamic String)是 Redis 底层所使用的的字符串表示(而不是使用传统的 C 字符串). redis需要的不仅仅是一个字符串变量,而是一个 ...

最新文章

  1. 数据库基础笔记(MySQL)1 —— 基础概念
  2. 世界一流大学观察报告:斯坦福大学何以后来居上?
  3. INADDR_ANY的理解
  4. 透露|Java学习的最后一点小秘密
  5. struts标签判断两个session中的字符串值是否相等
  6. hdu 5131 (2014广州现场赛 E题)
  7. 分布式系统——zabbix 用 onealert实现报警、agent主动模式、proxy代理
  8. boost::container模块实现虚拟测试分配器的程序
  9. debug信息关闭 tp6_「Flask实战2」设置debug模式
  10. 【开发环境专题一】Maven环境搭建
  11. 你该怎么去学软件测试,过来人告诉你
  12. 【观点讨论与支撑】明星和成功人士真的就只有成功的一面吗?背后的心酸和痛苦的经历我感觉更重要!
  13. 无人机会飞丢及编程上的改进思路
  14. cur前缀_常用英语前缀
  15. 什么邮箱的归档功能好用?
  16. 安装Android Studio遇到的几个困难和解决办法
  17. R语言 观测异常值并改进
  18. allergro音乐术语什么意思_音乐术语里面fz是什么意思?
  19. 我的第一个Android应用软件——《飞鸟集》
  20. 开发者中心证书报错Program License Agreement updated解决方法

热门文章

  1. Metasploit Framework 简介与使用
  2. php curl 防止采集,php多线程采集网页的解决办法 curl多线程采集
  3. yoast造成php内存,php – Yoast SEO |如何创建自定义变量
  4. struts2 去掉或修改后缀名
  5. 实例学习SSIS(一)--制作一个简单的ETL包
  6. spring 控制hibernate的session何时关闭.
  7. Index of Test
  8. JavaScript基础学习第四天
  9. 获取某一日期为当年的第几旬
  10. java Object解析