redis源码中获取SDS可用空间长度
/*
* 返回 sds 可用空间的长度
*
* T = O(1)
*/
static inline size_t sdsavail(const sds s) {
struct sdshdr *sh = (void*)(s-(sizeof(struct sdshdr)));
return sh->free;
}
为什么不能直接使用s->free
获取可用空间长度?s-(sizeof(struct sdshdr))
代表什么?
回答
因为SDS返回的结果是*buf
s-(sizeof(struct sdshdr))
代表的是整个SDS结构体
只有这样才能够使用SDS中的其它变量len
和free