gpt4 book ai didi

c - Redis 动态字符串应该是 unsigned int 吗?为什么要保留免费而不是大小?

转载 作者:IT王子 更新时间:2023-10-29 06:15:16 26 4
gpt4 key购买 nike

由于我正在做的项目需要使用键值存储,所以最近一直在看键值存储(Memcached、Redis)。在细读 Redis 的特性和浏览源代码时,我注意到 Redis 有一个动态字符串类型(很酷)。

struct {
int len;
int free;
char buf[];
};

我以前使用过类似的方法,看到类似的数据结构(很高兴/很开心)。但是有一些奇怪的行为。我对“免费”而不是“大小”语义感到惊讶,并且值是 (int) 而不是 (unsigned int)。

是否应该将元素 len 和 free 声明为 unsigned int?

存储剩余空间的成员 'free' 或存储总分配大小的成员 'size' 哪个更好?

Redis 多久处理一次长于 (unsigned short int) 的字符串? (64k)?

最佳答案

我非常怀疑这是一个错误。我的猜测是,Salvatore 故意选择这个 (int) 是因为“内存优化/速度/避免转换”,以及实际上这个值不能越界的事实。可能字节顺序也是一个因素。

Redis 的高级变长字符串类型肯定没有 64k 的限制。在某些情况下,我使用了超过 100MB(单键)的字符串。

阅读docs : 字符串值的长度最大为 512 兆字节。

关于c - Redis 动态字符串应该是 unsigned int 吗?为什么要保留免费而不是大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20694684/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com