【算法】memcached slabs内存分配算法详解

本文详细解析了memcached的Slab内存分配算法,包括如何按2的幂次划分1MB内存块,slabclass_t结构体的作用,以及slab、item和free list之间的关系。此外,还讨论了slab分配和回收的流程,以及slab分配可能导致的内存浪费问题。
摘要由CSDN通过智能技术生成

原文:http://blog.sina.com.cn/s/blog_7530db6f0100omfn.html

Memcached Slab算法是根据powers of 2来将1MB的内存块划分成多个小内存块, 而这1MB的内存块称为页:

Powers of 2是2的n次方的意思,例如:2的0次方是1,2的1次方是2,2的2次方是4,2的3次方是8等等。

而将1MB的内存按2的n次方划分可以划分成20种不同的内存块,因为2的20次方是1MB(1048576)。所以可以说,memcached管理着20种不同的内存块的集合。

memcached <wbr>slabs内存分配算法详解

而memcached是通过slabclass_t结构体来管理这些小内存块的, slabclass_t的定义如下:

typedef struct
{

    unsigned int  size;
    unsigned int  perslab;

    void  **slots;
    unsigned int  sl_total;
    unsigned int  sl_curr;

    void  *end_page_ptr;
    unsigned int  end_page_free;
    unsigned int  slabs;

    void  **slab_list;
    unsigned int  list_size;
    unsigned int  killing;

}  slabclass_t;

根据上面的结构体,我们完全可以指定memcached中slabs实际的内存分配。

2. slab 内存分配单位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值