当前位置: 首页 > news >正文

泳衣服饰东莞网站建设博物馆网站建设

泳衣服饰东莞网站建设,博物馆网站建设,网站开发容易吗,淘宝网站建设基本流程图Redis系列之底层数据结构SDS 实验的环境 Redis 6.0VSCode 1.88.1 什么是SDS? SDS#xff1a;Simple Dynamic String#xff0c;翻译为简单动态字符串。SDS是一种用于存储二进制数据的数据结构#xff0c;具有动态扩容的特点#xff0c;代码位于src/sds.h和src/sds.c …Redis系列之底层数据结构SDS 实验的环境 Redis 6.0VSCode 1.88.1 什么是SDS? SDSSimple Dynamic String翻译为简单动态字符串。SDS是一种用于存储二进制数据的数据结构具有动态扩容的特点代码位于src/sds.h和src/sds.c SDS的总体数据结构大致如图在源码里sds包括几个部分len、alloc、flags、buf其中 sdshdr是头部buf是真实存储数据的地方在存储的数据后面会跟一个\0所以数据加上\0就是所谓的buf len保存了SDS字符串的长度buf[]保存数据的地方alloc分别以uint8, uint16, uint32, uint64表示整个SDSflags始终为一字节, 以低三位标示着头部的类型, 高5位未使用 查看源码sds.h可以看到SDS里面有几种不同的头部其中sdshdr5实际并未使用到所以实际上有四种不同的头部 /* Note: sdshdr5 is never used, we just access the flags byte directly.* However is here to document the layout of type 5 SDS strings. */ struct __attribute__ ((__packed__)) sdshdr5 {unsigned char flags; /* 3 lsb of type, and 5 msb of string length */char buf[]; }; struct __attribute__ ((__packed__)) sdshdr8 {uint8_t len; /* used */uint8_t alloc; /* excluding the header and null terminator */unsigned char flags; /* 3 lsb of type, 5 unused bits */char buf[]; }; struct __attribute__ ((__packed__)) sdshdr16 {uint16_t len; /* used */uint16_t alloc; /* excluding the header and null terminator */unsigned char flags; /* 3 lsb of type, 5 unused bits */char buf[]; }; struct __attribute__ ((__packed__)) sdshdr32 {uint32_t len; /* used */uint32_t alloc; /* excluding the header and null terminator */unsigned char flags; /* 3 lsb of type, 5 unused bits */char buf[]; }; struct __attribute__ ((__packed__)) sdshdr64 {uint64_t len; /* used */uint64_t alloc; /* excluding the header and null terminator */unsigned char flags; /* 3 lsb of type, 5 unused bits */char buf[]; };为什么要使用SDS Redis是用C语言写的为什么不直接就用C语言里的char来定义字符串 获取字符串长度 由于有len属性所以获取SDS字符串的长度只需要读取len属性所以时间复杂度为O(1)。如果直接使用C语言中的字符串来实现获取字符串的长度需要遍历计数时间复杂度为O(n)。 避免缓存区溢出 在C语言中如果使用strcat函数来进行两个字符串的拼接如果没有分配足够长度的内存空间就会造成缓存区溢出。而对于SDS数据类型在进行字符串修改的时候会根据记录的len属性检查内存空间是否满足需求如果不满足会进行相应空间的扩展所以不会出现缓存区溢出 减少字符串内存重新分配次数 在C语言中字符串是不会记录字符串的长度的所以一旦修改了字符串就需要重新分配内存因为如果没有重新分配字符串长度增大时会造成内存溢出区溢出长度减小时会造成内存泄漏。而对于SDS来说因为有长度熟悉len和alloc属性的存在SDS实现了空间预分配和惰性空间释放两种策略来减少重新分配内存 空间预分配SDS对空间进行扩展的时候扩展的内存比实际需要的多这样可以减少字符串增长操作所需的内存重新分配次数惰性空间释放SDS对字符串进行缩短操作时不会立即进行内存重新分配来回收缩短后多余的内存空间而是使用alloc将这些字节数量记录下来等待后续使用 二进制安全 在C语言中是以空字符串作为字符串结束的标识但是一些特殊的字符串可能就包括空字符串的所以容易丢失数据不能正确存取。而SDS是根据len属性以处理二进制的方式来处理buf里的数据所以保存数据更加安全 兼容部分C字符串函数 SDS可以重用C语言库string.h中的一部分函数 C字符串和SDS对比 C字符串SDS获取字符串长度时间复杂度为O(n)获取字符串的长度时间复杂度为O(1)不安全可能会造成缓冲区溢出安全不会造成缓冲区溢出修改字符串n次就需要进行n次内存分配修改字符串长度n次最多需要n次内存分配只能保存文本数据可以保存文本数据或者二进制数据可以使用所有string.h库中的函数可以使用一部分string.h库中的函数
http://www.eeditor.cn/news/118788/

相关文章:

  • dedecms建手机网站个人网页制作实验报告
  • 建筑网站、导航栏网站模板特效
  • 网站开发语言开发厨师培训机构 厨师短期培训班
  • xml网站地图每天更新做网站淘汰了
  • 石家庄网站建设咨询薇在工行网站上如何做现金理财
  • 网站开发需求用什么软件app开发公司费用
  • 邯郸营销网站建设营销培训学院
  • 广州好的网站设计公司如何填写网站建设计划表
  • 重庆网站优化网络服务中投建设官方网站
  • 网站开发的经验做论坛网站好吗
  • 汉中网站建设哪家好木质家居 技术支持 东莞网站建设
  • 空间查看网站山东德州最大的网站建设教学
  • 做软装什么网站可以wordpress如何导出数据字典
  • 做英语网站网站备案负责人 更换
  • 哪里可以做营销型网站自适应网站制作教程
  • 保定附近的做网站价格南通网站seo报价
  • 建设课程网站的目的哪里有做配音的兼职网站
  • 留白的网站国外优秀购物网站
  • 英语翻译网站开发seo教程免费
  • seo网站诊断顾问综合电子商务型企业网站
  • pc下载网站模板ipad 设计网站
  • 公司网站注意事项福州制作手机网站
  • 网站建设专家工作总结电子商务平台内的自然人经营者
  • 婚纱摄影网站制作番禺做网站技术
  • 四川城乡建设厅官方网站做网站怎么样引流
  • 网站建设交流群云南推广公司
  • 网站建设意义和目的wordpress 返利
  • 免费行情软件app网站大全深圳在线直播
  • 建设常规的网站报价是多少钱荣县规划和建设局网站
  • 专门建立网站的公司吗百度站长工具添加不了站点