C++中string类和Redis中SDS的比较
来源:互联网 发布:c语言求100以内素数 编辑:程序博客网 时间:2024/04/28 05:16
Redis中SDS与C++中string类的比较
SDS (Simple Dynamic String,简单动态字符串)是 Redis 底层所使用的字符串表示, 几乎所有的 Redis 模块中都用了 SDS。 Sds 在 Redis 中的主要作用有以下两个: 1.实现字符串对象(StringObject); 2.在 Redis 程序内部用作 char* 类型的替代品。 在 C 语言中,字符串可以用一个 \0 结尾的 char 数组来表示。 这种简单的字符串表示,在大多数情况下都能满足要求,但是,它并不能高效地支持长度计算和追加(append)这两种操作:c 1.每次计算字符串长度(strlen(s))的复杂度为 O(N) 。 2.对字符串进行 N 次追加,必定需要对字符串进行 N 次内存重分配(realloc)。 在 Redis 内部, 字符串的追加和长度计算很常见, 而 APPEND 和 STRLEN 更是这两种操作,在 Redis 命令中的直接映射, 这两个简单的操作不应该成为性能的瓶颈。 另外, Redis 除了处理 C 字符串之外, 还需要处理单纯的字节数组, 以及服务器协议等内容。 所以为了方便起见, Redis 的字符串表示还应该是二进制安全的: 程序不应对字符串里面保存的数据做任何假设, 数据可以是以 \0 结尾的 C 字符串, 也可以是单纯的字节数组, 或者其他格式的数据。 考虑到这两个原因, Redis 使用 sds 类型替换了 C 语言的默认字符串表示: sds 既可高效地实现追加和长度计算, 同时是二进制安全的。
SDS与C字符串的区别:
1.常数复杂度获取字符串长度。 2.杜绝缓冲区溢出。 3.减少修改字符串是带来的内存冲分配次数(1.空间预分配 2.惰性空间释放)。 4.二进制安全。
以这几个方面来分析C++中string类和SDS的区别。
C++中string类和SDS的区别:
1.string类同样可以以常数复杂度获取字符串长度。因为string类内部具有记录字符串长度的私有成员,随着对字符串的操作其值也会改变,时刻保持着对应的字符串长度。 2.string类杜绝缓冲区溢出。如果在向string类添加元素时,没有足够的空间容纳新容器,则string类必须分配新的内存空间来保存以有元素和新元素,将以有元素从旧位置移动到新空间中,然后添加新元素,释放旧存储空间。 3.(1)string类中也有对空间的预分配,并且比SDS更加灵活,我们可以用reserve(n)函数对其预分配进行控制。而SDS有其特定的预空间分配机制,我们也可以以string来实现 (2)string类中并没有明显的惰性空间释放,但是对string来说当它需求大小小于当前容量时也不会退回内存空间。但是C++11引入了shrink_to_fit函数可以主动的退回string中不需要的内存空间,但需要我们显示的调用。 4.string类同样保证了二进制安全,其内部也并不以空字符为结尾的标志。他同样定义了记录其字符串大小的成员。所以同样保证了二进制的安全。
最重要的比较
到最后的比较中有一点最终决定放弃了string类的使用。 因为string类中在初始化时并不会对字符串进行预分配,所以会导致在一定的情况下,string类的分配操作会比SDS中的分配操作更多。
0 0
- C++中string类和Redis中SDS的比较
- redis:C字符串和SDS之间的区别
- Redis中sds结构中的柔性数组
- C中string比较函数
- Java String中null和""的比较
- Redis的sds
- redis数据库中的sds.h中字符串数组的一个说明
- Java中String和new String的区别,比较
- C#中string.contains和string.indexof的效率比较
- java中string对象的”equal“方法和“==”运算符 与 c#中的比较
- 字符串中String类的比较方法
- java中String类的比较:
- Jave中String的比较
- java中String的比较
- java中String的比较
- Java中String的比较
- java中String的比较
- Java中String的比较
- HashMap实现原理
- 初识C++之函数重载
- 20 sd_webImage 原理
- 控制器在退出的时候不执行dealloc方法
- 安装与配置
- C++中string类和Redis中SDS的比较
- 归并排序
- PHP错误提示解决方案
- 21.HTTP原理 & Socket开发体验
- Java 之NIO(一) - 简介(Buffer)
- hrbust 1430 哈理工oj 1430 神秘植物【递推+矩阵快速幂】
- HTML网页之进入网站口令脚本
- BugTags 让Bug无所遁形,记录集成BugTags之路
- 12C-OCP升级1z-060-014