标签:SDS free 数组 简单 字符串 长度 动态 buf
2.1 SDS
SDS(Simple Dynamic String在Redis里被用作动态字符串的实现。,是一个包含char数组的结构体。
- free 空闲数组
- len 已经使用的数组的长度
- buf 具体保存数组的地方
2.2 SDS与C字符串的区别
C语言使用长度为N+1的字符数组来存储长度为N的字符串,Redis为了提高效率并没有采用这种策略
- 提高获得字符串长度的效率即提高STRLEN的速度。 C语言字符串要想获得长度需要遍历整个数组 O(n),Redis只需要读取len存储的数值O(1)
- 杜绝字符串拼接可能带来的内存溢出。拼接之前检查free的大小能否装得下需要拼上去的字符串,装不下就要重新分配
- 灵活的空间分配策略减小在对字符串修改的时候内存空间申请与释放带来的消耗。空间预分配:当需要扩展SDS->buf数组的长度的时候,会预分配一定的冗余空间;惰性空间释放:SDS->buf出现空余的时候并不会回收,而是使用free记录下来便于下次使用
- 二进制安全。SDS通过len的值来判断buf何时结束,因此即使保存的二进制数据中有结束字符也不会带来影响
- 兼容部分C语言操作字符串的函数,因为SDS也使用'/0'作为结束标志
标签:SDS,free,数组,简单,字符串,长度,动态,buf 来源: https://www.cnblogs.com/AshOfTime/p/10616044.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。