•Slab分配模式把对象分组放进缓冲区(尽管英文中使用了Cache这个词,但实际上指的是内存中的区域,而不是指硬件高速缓存)。因为缓冲区的组织和管理与硬件高速缓存的命中率密切相关,因此,Slab缓冲区并非由各个对象直接构成,而是由一连串的“大块(Slab)”构成,而每个大块中则包含了若干个同种类型的对象,这些对象或已被分配,或空闲。
上面是slab算法的定义。由此我们可以看出,slab算法是把一块大内存分成很多的页,多少页作为一个slab,然后把申请的内存作为对象,每一类对象都有一个slab来保存对象。
上图可以看出slab算法的基本思路。
根据申请内存大小,我们可以按照下面的划分方法,来划分对象。
* Alloc Size Chunking Number of zones
* 0-127 8 16
* 128-255 16 8
* 256-511 32 8
* 512-1023 64 8
* 1024-2047 128 8
* 2048-4095 256 8
* 4096-8191 512 8
* 8192-16383 1024 8
* 16384-32767 2048 8
有了上面的一些基础。我们就可以来一步步实现slab算法。
首先是内存的初始化
在这里我们需要把内存按照页对齐,才能把内存初始化成整页。初始化一些slab的基本参数:slab大小,页数目,页链表,页大小等参数。
内容待续,等整理以后上传。。。