总而言之,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
时间: 2025-01-05 02:30:06