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返回的结果是*bufs-(sizeof(struct sdshdr))代表的是整个SDS结构体
只有这样才能够使用SDS中的其它变量len和free