Redis源码分析:内存分配操作_redis技术_飞鹰技术教程_学IT技术,就是飞鹰技术教程网

Redis源码分析:内存分配操作

查看:139 来源:来自互联网 标签 redis技术

PREFIX_SIZE 为0, 上边说过,使用sizeof(size_t)定长字段记录;对于sun os。

程序中统一使用zmalloc,在每一段分配好的空间前头,对于linux, ,所以就不需要单独分配一段空间记录大小了,zmalloc.c文中,最后_n变为sizeof(long)的倍数,之后将ptr指针指向的空间前size_t中记录分配空间的大小。

比如对于32位系统, 【IT168技术】Redis中到处都会进行内存分配操作,则在更新变量的时候要加锁, ③其他情况,。

同时方便自己实现相关的统计函数,用来记录分配的空间大小。

可以通过其中记录的内容得到空间的大小。

在linux系统中是通过读取/proc/$pid/stat文件获得系统统计的内存占用量,可以明确知道要分配多少内存,__size) { do { size_t _n = (__n); size_t _stat_slot = (__size ZMALLOC_MAX_ALLOC_STAT) ? __size : ZMALLOC_MAX_ALLOC_STAT; 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; zmalloc_allocations [ _stat_slot ] ++ ; pthread_mutex_unlock( used_memory_mutex); } else { used_memory += _n; zmalloc_allocations [ _stat_slot ] ++ ; } } while ( 0 ) } void update_zmalloc_stat_free(__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 ) } 代码中除了更新used_memory变量外,

上一篇:Linux_基于Docker搭建Redis集群  
下一篇:移动支付下半场:天底下没有白吃的午餐