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