newlen *=2;// > 1M 扩容1Melsenewlen += SDS_MAX_PREALLOC;// 获取sds 结构类型type = sdsReqType(newlen);// type5 默认转成 type8if(type == SDS_TYPE_5) type = SDS_TYPE_8;// 头长度hdrlen = sdsHdrSize(type);if(oldtype==type) {// 长度够用 并且 数据结构不变newsh = s_reall...
type 5 is* not able to remember empty space, so sdsMakeRoomFor() must be called* at every appending operation. */// SDS_TYPE_5无法记录剩余容量大小,所以在这里我们直接用SDS_TYPE_8if(type==SDS_TYPE_5)type=SDS_TYPE_8;hdrlen=sdsHdrSize(type);if(oldtype==type){// 如果newlen在oldtype...
2、如果新长度小于最大预分配长度则扩容为2倍,如果新长度大于最大预分配长度则仅追加SDS_MAX_PREALLOC长度 3、如果是SDS_TYPE_5,则直接分配SDS_TYPE_8类型 4、如果类型没有发生变化则重新开辟一块内存将原先整个SDS拷贝一份过去即可 image.png 其他的另外几个函数都是依赖于这几个核心函数的,现在应该对SDS有了...
1. 创建字符串 创建SDS 的大致流程是这样的:首先根据字符串长度计算得到 type,根据 type 计算头部所需长度,然后动态分配内存空间。 注意: 1.创建空字符串时,SDS_TYPE_5 被强制转换为 SDS_TYPE_8(原因是创建空字符串后,内容可能会频繁更新而引发扩容操作,故直接创建为 sdshdr8)2.长度计算有 +1 操作,因为结...
init) memset(sh, 0, hdrlen + initlen + 1); // 将指针移跳过header的位置,指向buf s = (char *)sh + hdrlen; // 指向的是 flags字段的起始位置 // flag 低3位代表的是字段类型(SDS_TYPE_5 、SDS_TYPE_8、SDS_TYPE_16、SDS_TYPE_32、SDS_TYPE_64) fp = ((unsigned ch...
case SDS_TYPE_5:如果 SDS 类型是 5,则使用SDS_TYPE_5_LEN(Flags)来计算字符串的长度。这个宏通常会从标志位中提取出长度信息。 case SDS_TYPE_8、case SDS_TYPE_16、case SDS_TYPE_32、case SDS_TYPE_64:对于其他类型的 SDS 字符串,通过调用SDS_HDR(size, s)宏来获取头结构的指针,然后返回头结构中的...
从Redis3.2开始,sds就有了5种类型,5种类型分别存放不同大小的字符串。在创建字符串时,sds会根据字符串的长度选择不同的类型。最终由sdsnewlen函数创建字符串: 代码语言:javascript 代码运行次数:0 运行 AI代码解释 sds sdsnewlen(const void *init, size_t initlen) { void *sh; sds s; char type = sds...
*fp = SDS_TYPE_5 | (newlen << SDS_TYPE_BITS); } break; case SDS_TYPE_8: SDS_HDR(8,s)->len = newlen; break; case ...: //代码略 } } 基于sdssetlen实现的函数:sdsupdatelen、sdsclear实现就比较简单了,见代码 sdsMakeRoomFor函数:如果需要则预分配空间给后续使用,并不会增加sdshdr的长...
5.经营型(Enterprising):具有领导才能,典型职业如企业管理者; 6.常规型(Conventional):办事细心有条理,典型职业如行政人员; 一:现实型(Realistic type) 现实型的孩子喜欢有规律的具体劳动和需要某种技能或动手操作的职业。他们通常喜欢与机械、电子、建筑、或动...
#define SDS_TYPE_MASK 7 // sds结构体,使用不同的结构体来保存不同长度大小的字符串 typedef char *sds; struct __attribute__ ((__packed__)) sdshdr5 { unsigned char flags; /* flags共8位,低三位保存类型标志,高5位保存字符串长度,小于32(2^5-1) */ ...