动态长度字符串
本质就是typedef char *sds;
但是redis在sds的前面又增加了一个数据结构(不同长度数据结构不一样)
和c++的string不一样,这里的长度,容量和内存申请都是完全独立的
需要非常小心的手动维护
否则会出现数值和实际申请的内存不一致的情况
相关文件
- sds.h
- sds.c
不乱
首先,结构在C语言中也是一种数据类型,叫做聚组类型(还包括数组)。他和其他的数据类型是一样的,在定义一个结构体的时候,系统并不会为他真正的分配内存空间(定义的结构体变量要在编译的阶段才分配空间,而结构体指针要显示的使用malloca来分配空间),也就是说,在定义结构体这种数据类型的时候是不会分配内存空间的,只有在定义变量的时候,才会分配。
下面是摘自百度百科 对结构题存储的三点:
外围扩展功能
HyperLogLog是一种数据结构(本质为字符串)
基于一种基数算法
它可以用极小的内存空间完成数据统计
它本身属性有点像set
一样
因为它的存储数据不是一一对应的关系,
实际是有错误的,
官方给出的错误率是0.81%
优点:相比set,可以极大的减少内存的使用