在Linux中,伙伴系统是以页为单位分配内存。但是现实中很多时候却以字节为单位,不然申请10Bytes内存还要给1页的话就太浪费了。slab分配器就是为小内存分配而生的。slab分配器分配内存以Byte为单位。但是slab分配器并没有脱离伙伴系统,而是基于伙伴系统分配的大内存进一步细分成小内存分配。
走进slub
做个小实验:
#include <linux/module.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/mm.h>
static struct kmem_cache* slub_test;
struct student{
int age;
int score;
};
static void mystruct_constructor(void *addr)
{
memset(addr, 0, sizeof(struct student));
}
struct student* peter;
int slub_test_create_kmem(void)
{
int ret = -1;
slub_test = kmem_cache_create("slub_test", sizeof(struct student), 0, 0, mystruct_constructor);
if(slub_test