Redis自定义动态字符串(sds)模块(二)
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)模块(二)相关推荐
- Redis内部数据结构详解之简单动态字符串(sds)
本文所引用的源码全部来自Redis2.8.2版本. Redis中简单动态字符串sds数据结构与API相关文件是:sds.h, sds.c. 转载请注明,本文出自:http://blog.csdn.ne ...
- Redis源码初探(1)简单动态字符串SDS
前言 现在面试可太卷了,Redis基本是必问的知识点,为了在秋招中卷过其他人(虽然我未必参加秋招),本菜鸡决定从源码层面再次学习Redis,不过鉴于本菜鸡水平有限,且没有c语言基础,本文不会对源码过于 ...
- Redis数据结构之简单动态字符串SDS
Redis的底层数据结构非常多,其中包括SDS.ZipList.SkipList.LinkedList.HashTable.Intset等.如果你对Redis的理解还只停留在get.set的水平的话, ...
- Redis数据结构——简单动态字符串-SDS
1.SDS简介: redis没有使用C语言传统的字符串表示(以空字符结尾的字符数组),而是自己构建了一种名为简单动态字符串(SDS)的抽象类型,并将SDS用作redis的默认字符串表示. 除了用来保存 ...
- Redis 动态字符串(SDS)底层原理详解
文章目录 前言 1. 动态字符串 1.1 SDS的数据结构 1.2 SDS 与 C 字符串的区别 1.2.1 常数复杂度获取字符串长度 1.2.2 杜绝缓冲区溢出 1.3 减少修改字符串时带来的内存重 ...
- Redis源码剖析(十)简单动态字符串sds
在对象系统概述中发现,好像所有和字符串有关的内容都有sds的存在,实际上,它是Redis内部对于c字符串的封装,所谓c字符串,其实就是char *,在sds.h头文件中可以清楚的看到它的定义 //sd ...
- Redis之简单动态字符串sds
转载:https://segmentfault.com/a/1190000012262739 redis在处理字符串的时候没有直接使用以'\0'结尾的C语言字符串,而是封装了一下C语言字符串并命名为s ...
- Redis笔记之基本数据结构 动态字符串SDS
简单动态字符串 传统上的C语言的字符串表示是以空字符结尾的字符数组(C字符串),redis自己实现一个动态字符串(SDS),两者之间的区别以及使用SDS的好处有: 结构不同.C字符串以空字符结尾的字符 ...
- redis源码学习-03_动态字符串SDS
概述 简单动态字符串(SDS, Simple Dynamic String)是 Redis 底层所使用的的字符串表示(而不是使用传统的 C 字符串). redis需要的不仅仅是一个字符串变量,而是一个 ...
最新文章
- 数据库基础笔记(MySQL)1 —— 基础概念
- 世界一流大学观察报告:斯坦福大学何以后来居上?
- INADDR_ANY的理解
- 透露|Java学习的最后一点小秘密
- struts标签判断两个session中的字符串值是否相等
- hdu 5131 (2014广州现场赛 E题)
- 分布式系统——zabbix 用 onealert实现报警、agent主动模式、proxy代理
- boost::container模块实现虚拟测试分配器的程序
- debug信息关闭 tp6_「Flask实战2」设置debug模式
- 【开发环境专题一】Maven环境搭建
- 你该怎么去学软件测试,过来人告诉你
- 【观点讨论与支撑】明星和成功人士真的就只有成功的一面吗?背后的心酸和痛苦的经历我感觉更重要!
- 无人机会飞丢及编程上的改进思路
- cur前缀_常用英语前缀
- 什么邮箱的归档功能好用?
- 安装Android Studio遇到的几个困难和解决办法
- R语言 观测异常值并改进
- allergro音乐术语什么意思_音乐术语里面fz是什么意思?
- 我的第一个Android应用软件——《飞鸟集》
- 开发者中心证书报错Program License Agreement updated解决方法