Redis-sds源码剖析第一天

来源:互联网 发布:明底线知敬畏演讲稿 编辑:程序博客网 时间:2024/05/04 14:37
/* * 类型别名,用于指向 sdshdr 的 buf 属性 */typedef char *sds;/* * 保存字符串对象的结构 */struct sdshdr {    // buf 中已占用空间的长度    int len;    // buf 中剩余可用空间的长度    int free;    // 数据空间;使用柔性数组;sizeof(sdshdr)时是8个字节;    char buf[];};/* * 返回 sds 实际保存的字符串的长度 * * T = O(1) */static inline size_t sdslen(const sds s) {    //s-(sizeof(struct sdshdr)作用是返回到sdshdr结构体的起始地址;    /*(void*)作为通过用指针,可以和其他类型指针相互交换;    c中式隐式转换;而c++中要求显示转换;    但此处为什么用void* 而不直接用struct sdshdr *?????*/    struct sdshdr *sh = (void*)(s-(sizeof(struct sdshdr)));    return sh->len;}

读到256行
原来条件编译也可以放在函数中使用; 另外redis源码的简洁规范十分值得学习;里面的编程思想更值得自己慢慢专研。

0 0
原创粉丝点击