• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

竹千代

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

redis2.8--内存管理

总而言之,redis内存管理是采用主要由操作系统自主控制内存分配,辅之以简单封装,达到简单且稍微改良的性能。

  • 内存块,标记上本块size

如上图所示,

当调用zmalloc/zmalloc时,输入参数为size,实际分配了 size_t + size 的空间。前面size_t空间存放size数值,后面size空间才是真正的buffer;然后返回p_malloc

当调用zmalloc/zfree时,输入参数为p_malloc,函数内部实际上要通过移位找到p_real,这时候才调用真正free函数。

  • 利用内存对齐,虽然会导致一些内存块内碎片问题,但可以规范空闲内存块(不至于什么大大小小的都有),从而加大尽早在空闲内存块列表中找到合适的可能性

 

    // 按 4字节向上取整
    if (_n&(sizeof(long)-1)) _n += sizeof(long)-(_n&(sizeof(long)-1)); 

 

具体原因,分析malloc/free工作原理:  http://stackoverflow.com/questions/1119134/how-do-malloc-and-free-work?answertab=votes#tab-top

posted on 2015-05-12 19:42  竹千代  阅读(147)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3