日期:2014-05-16  浏览次数:20467 次

Redis源码学习之【内存分配】

介绍

Redis现在的版本可以支持使用tcmalloc或者是jemalloc或是apple的malloc,或者是Redis自己的zmalloc。zmalloc对内存的分配管理是线程安全的,而且分配的内存必须要求是以sizeof(long)对其的。

源码

zmalloc.h zmalloc.c

分析

宏变量说明:

  • PREFIX_SIZE:在实际分配的内存之前用于记录分配的内存的大小,和在实际的C中的malloc的内存数据结构类似,但是可能C是根据具体的环境不同的。
  • HAVE_MALLOC_SIZE:表明是否使用的是其他的malloc实现这些malloc的实现中就可以有相关的函数可以直接获得所分配的内存的大小,如果没有的话则根据zmalloc的实现是实际分配的size+PREFIX_SIZE。

其他

zmalloc除了提供标准的zamlloc,zcalloc,zrealloc,zfree功能之外还提供了dump内存数据到字符串的函数zstrdup,获得已经使用的内存总量的zmalloc_used_memory函数以及设置内存溢出处理函数的zmalloc_set_oom_handler。同时还提供了用于获得系统中的RSS,即程序所占用的实际的物力内存大小 。

具体的实现可以去阅读详细的源代码,在知道了上面的基础之上很容易对源代码进行阅读。