redis是一个key-value的数据库,基于内存的,所以其内存管理是非常重要的,redis内存管理部分非常简单,主要在zmalloc.h和zmalloc.c两个文件中。
zmalloc.h定义了一系列的内存管理接口,zmalloc.c实现了这些结构。
看redis的内存管理源码之前,先看看redis内存组织结构。
redis分配管理内存,是在分配的内存前加一个固定大小的prefis-size空间,用于记录该段内存的大小。每次分配内存后,使用的地址指针为指向memorysize的执着呢,通过该指针,可以很容易的计算出实际内存的头地址,从而释放内存。
prefix-size memory size redis会记录分配内存的情况,会记录总共分配的内存,并且该过程可以控制是否为线程安全的,其操作都位原子的。zmalloc.c中有一个静态变量used_memory用来记录当前分配的内存总大小。