MEMCACHED(3) SLAB内存池

1. 对这个SLAB内存池实在没什么好说的,比较直白。

简单介绍一下各个参数吧。

 

2. setting的与SLAB相关的参数

  chunk_size:这是SLAB所存储的最小对象大小,包括sizeof(item) + key + value。

 item_size_max:这是SLAB所存储的最大对象大小。默认是1MB。

factor:默认系数1.25. 比如说,第一个SLAB缓存大小为32字节的对象,那么第二个SLAB缓存大小为40字节的对象。以此类推,1MB为上限。

maxbytes:内存池所能占有的内存上限。

 

3. slabclass_t中的参数

 void **slab_list;       /* array of slab pointers */
    unsigned int list_size; /* size of prev array */

可以想象成是void* slab_list[list_size];

每个SLAB槽(总共不超过200个),可以分配多个相同的SLAB页,在此管理;

每个SLAB页都是一块连续内存,大小为该SLAB槽的 size * perslab。 前者是所缓存的对象尺寸,后者是该SLAB页能存储该对象的最大个数。

 

unsigned int slabs;     /* how many slabs were allocated for this class */

上面这个参数就是所分配的页数目

 

void **slots;           /* list of item ptrs */
    unsigned int sl_total;  /* size of previous array */
    unsigned int sl_curr;   /* first free slot */

这里保存被释放的对象,显然不是连续的内存。slots改名字叫做freeslots更合适点。

sl_total表示slots数组的大小,而sl_curr表示当前可用的空闲slots,如果sl_curr等于sl_total,就需要重新分配slots了。 

 

 

 void *end_page_ptr;         /* pointer to next free item at end of page, or 0 */
    unsigned int end_page_free; /* number of items remaining at end of last alloced page */

第一个参数指向当前slab槽中可用的那个slab页;

第二个参数指示该slab页还可以缓存多少个对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值