memcache slabs

memcache采用slab机制管理内存,将内存分为多个层次,每个层次的page包含相同大小的item。根据item大小分配内存时,选择满足条件的item层次,并通过预分配和空闲item列表进行高效管理。slabs_clsid()函数确定item所属层次,slabs_init()初始化slab类,slabs_preallocate()预先分配slabs,do_slabs_newslab()分配新page,do_slabs_alloc()和do_slabs_free()负责内存分配与释放。slab机制提高了内存分配效率,但可能导致内存浪费。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        memcache 使用slab机制对内存进行分配和管理的。

 

一 整体结构

 

       把内存分成多个层次,在每个层次中,可以有多个page, 所有层次的page大小基本是一直的(为什么不相同,后面介绍),每个page中又分成相同大小的item,里面有多少个item,取决于page大小和item所在的层次,其中相邻层次直接item大小具有如下关系

                                     size(item: n+1 )  = size( item: n) * grow_factor  

       其中的grow_factor 是可配置的参数。

       在内存分配时,如果需要大小为k的空间,那么就从第n个层次中得到一个item ,其中n需要满足

                                           size(item:n-1)  <   k  <=  size(item:n)

       那么从n个层次中的这么多个item中取哪个?所有被取光了怎么办?使用完了释放了怎么办? 这些都会在后面进行详细的介绍

 

 

二 结构成员

 

 

三 函数介绍

 

3.1 slabs_clsid()

 

3.2 slabs_init

 

3.3 slabs_preallocate

 

3.4  grow_slab_list

 

 

 

3.5 do_slabs_newslab

 

 

3.6  do_slabs_alloc

 

3.7 do_slabs_free

 

四 总结

 

优点:  通过不同层次的item,以及空闲item维护,可以降低请求过程中内存的分配和释放,提高效率

 

缺点: 1 每次使用的item可能大于时间需求空间量,导致内存浪费。

 

 

 

五 参考

 

http://blogold.chinaunix.net/u1/56406/showart_2331017.html     memcache探索之slabs

 

http://tech.idv2.com/2008/07/11/memcached-002/    理解memcache内存机制

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值