我最近开始浏览memcached源代码,我遇到了这个结构。根据我的理解,大约有64个板块,每个板块代表一个独特的块大小。如果我们采用第一个slab类(大小为80,那么)那么属于这个slab的页面会将它的内存分成80个字节。
typedef struct {
unsigned int size; // sizes of items
unsigned int perslab; // how many items per slab
void *slots; // list of item ptrs
unsigned int sl_curr; // total free items in list
unsigned int slabs; // how many slabs were allocated for this class
void **slab_list; // array of slab pointers
unsigned int list_size; // size of prev array
size_t requested; // The number of requested bytes
} slabclass_t;
我不明白这一行,
unsigned int slabs; // how many slabs were allocated for this class
他为平板类分配了多少块板是什么意思?每个平板类都必须是唯一的吗?为什么一个板坯类中会有多个板坯?我错过了什么吗?
类slabclass_t
的分配平板基本上是一大块内存,承载perslab
大小的size
项目。如果使用该slab中的所有项目,Memcached将分配另一块内存并将其添加到slab_list
。这些记忆块也被称为pages
或slab_pages
。
因此,如果你启动一个新的Memcached服务器并为slab类存储一个项目(比如size = 80),那么对于这个slab类slabs=1
。一旦你在那个类中存储perslab+1
项目,你将有slabs=2
,slab_list
将包含2个项目。
基本上,你有slab_list
和slabs
的长度,而list_size
是它的容量。
我从slabs.c得到了大部分这个,所以如果我出错了,请纠正我。