zoukankan      html  css  js  c++  java
  • redis基础结构-SDS

    SDS

    /*
     * 保存字符串对象的结构
     */
    struct sdshdr {
        
        // buf 中已占用空间的长度
        int len;
    
        // buf 中剩余可用空间的长度
        int free;
    
        // 数据空间
        char buf[];
    };
    

    学习

    1. 在函数sdsnewlen中,根据是否需要初始化使用zmalloc和zcalloc两个不同函数。
    2. 计算字符串长度的时候,直接使用函数sdslen,不需要调用strlen。
    3. 需要扩展free的空间时, 需要调用函数sdsMakeRoomFor, 该函数空间分配策略比较有意思, 如果free>=addlen,直接返回。 否则判断free+addlen是否小于SDS_MAX_PREALLOC这个宏, 如果小于,那么这次就分配2*(free+addlen)的空间, 这样每次多分配一陪的空间;否则就分配free+addlen+SDS_MAX_PREALLOC的空间。 这样可以控制最大多分配多少的空间, 以至于不要浪费太多空间。
  • 相关阅读:
    [hdu1402]A * B Problem Plus(NTT)
    拦截导弹问题(Noip1999)
    删数问题(Noip1994)
    1217:棋盘问题
    随笔功能测试
    教师派8
    教师派7
    教师派6
    教师派5
    教室派4
  • 原文地址:https://www.cnblogs.com/weiweng/p/12493528.html
Copyright © 2011-2022 走看看