Redis内存管理的基石zmallc.c源码解读(一)Redis内存管理的基石zmallc.c源码解读(二)
前面两篇博文,细致地介绍了zmalloc.c文件的各个函数,,不过大家要想深入学习Redis,还需要自己去看源码才是,我梳理了一下zmalloc.c文件的结构,为大家阅读源码提供便利。
全局变量
名称类型说明
used_memorystatic size_tRedis已用内存空间的大小
zmalloc_thread_safestatic int标识是否线程安全
used_memory_mutexpthread_mutex_t修改变量used_memory时的互斥锁
zmalloc_oom_handlerstatic void (*)(size_t)函数指针指向内存不足时调用的函数
函数主要函数
名称说明
zmalloc分配内存空间
zfree释放zmalloc分配的空间
zcalloc分配内存空间并初始化为0
zrealloc重新分配空间的大小
zstrdup字符串复制
zlibc_free同free()
其他函数
名称说明
zmalloc_enable_thread_safeness设置线程安全标识(zmalloc_thread_safe置1)
zmalloc_get_fragmentation_ratio内存使用率:RSS/used_memory
zmalloc_get_memory_size返回系统物理内存的大小(单位:字节)
zmalloc_get_private_dirty查询/proc/self/smaps中"Private Dirty"的大小
zmalloc_get_rss通过查询/proc/<pid>/stat文件获得RSS的值
zmalloc_get_smap_bytes_by_field查询/proc/self/smaps的指定字段的大小
zmalloc_set_oom_handler设置oom(内存不足)函数指针的值
zmalloc_size查询系统实际分配的内存空间的大小
zmalloc_used_memory查询已用空间(used_memory)的大小
zmalloc_get_memory_size()该函数在最新的Redis发布版中还未被包含。仅在目前(2015/04)的github开发版中。
宏宏函数
名称说明
update_zamlloc_stat_alloc分配内存空间后更新used_memory的值
update_zamlloc_stat_free释放内存空间后更新used_memory的值
update_zamlloc_stat_add线程安全地used_memory增加操作
update_zamlloc_stat_sub线程安全地used_memory减少操作
宏
名称说明
PREFIX_SIZE内存分配时比需求多分配的空间大小
HAVE_MALLOC_SIZE若使用tcmalloc、jemalloc或Mac系统则定义此宏
筑起梦想的鸟巢,开始人生的长跑,领先每回的冲刺,