Redis 源码剖析

阅读: 评论:0

Redis 源码剖析

Redis 源码剖析

zmalloc.c 源码阅读

Redis 自身对内存的分配和释放做了一定封装

阅读内容:

  • 内存分配及释放

  • 内存分配统计

  • 内存异常处理


  1. 可控制是否启用线程安全

    通过 void zmalloc_enable_thread_safeness(void); 函数将 zmalloc_thread_safe 变量置为 1 即开启

  2. 分配的内存统计

    zmalloc_thread_safe 标志位来决定是否在更新 used_memory 变量时加锁。整个内存分配的统计是通过宏定义去实现的

类似这样

#define increment_used_memory(__n) do { size_t _n = (__n); if (_n&(sizeof(long)-1)) _n += sizeof(long)-(_n&(sizeof(long)-1)); if (zmalloc_thread_safe) { pthread_mutex_lock(&used_memory_mutex);  used_memory += _n; pthread_mutex_unlock(&used_memory_mutex); } else { used_memory += _n; } 
} while(0)
  1. 内存溢出处理

static void zmalloc_oom(size_t size) {fprintf(stderr, "zmalloc: Out of memory trying to allocate %zu bytesn",size);fflush(stderr);abort();
}

注意 abort(),exit(), assert() 区别

exit()

  • flush 未写入的缓冲数据
  • 关闭所有打开的文件
  • 删除所有临时文件
  • 返回退出状态

abort()

  • 可能不会 flush 缓冲数据
  • 可能不会关闭打开的文件
  • 可能不会删除所有临时文件

assert()

  • 如果表达式为 0,表达式,文件名,行号,返回标准错误,然后调用 abort()## 标题

本文发布于:2024-02-13 21:10:42,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/1715731532254760.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:源码   Redis
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23