内核函数 kmem_cache_xxxx

struct kmem_cache *kmem_cache_create (const char *name, 
                                                                                size_t size, 
                                                                                size_t align,
                                                                                unsigned long flags, 
                                                                                void (*ctor)(void *))

功能: 创建一个slab新缓存
name:缓存的名称
size:对象的大小,以字节为单位,若此处填写过小的size(比如sizeof(int))会出现死机的问题
align:每个对象的对齐大小
flags:分配缓存时的选项如下
    SLAB_RED_ZONE 在对象头 尾插入标志,探测缓冲越界
    SLAB_POISON    使用slab层以知的值a5a5a5a5填充slab,有利于对未初始化内存的访问
    SLAB_CACHE_DMA 每个数据对象在 DMA 内存区段分配.
    SLAB_HWCACHE_ALIGN 命令slab层把一个slab内的所有对象按高速缓存行对齐。这就防止了“错误的共享”
    SLAB_PANIC 这个标志当分配失败时提醒slab层
    SLAB_STORE_USER:用struct track存储最后一个进程信息
ctor: 高速缓存的构造函数
头文件:#include <linux/slab.h>

void *kmem_cache_alloc(struct kmem_cache *cachep,gfp_t flags)
功能:从一个给定的缓存分配一个对象
cachep:kmem_cache结构指针
flags: 分配标志选项 如GFP_KERNEL GFP_ATOMIC
头文件:#include <linux/slab.h>

static inline void *kmem_cache_zalloc(struct kmem_cache *k, gfp_t flags)
功能:内部调用了kmem_cache_alloc传递的标志多了个__GFP_ZERO 对分配的对象进行清零
k:kmem_cache结构指针
flags:分配标志选项 如GFP_KERNEL GFP_ATOMIC
内核实现如下:
static inline void *kmem_cache_zalloc(struct kmem_cache *k, gfp_t flags)
{
    return kmem_cache_alloc(k, flags | __GFP_ZERO);
}
头文件:#include <linux/slab.h>

void kmem_cache_free(struct kmem_cache *cachep, void *objp)
功能:释放从缓存中分配的对象
cachep:kmem_cache缓存指针
objp:从缓存中分配的对象
头文件:#include <linux/slab.h>

void kmem_cache_destroy(struct kmem_cache *cachep)
功能:销毁一个缓存
cachep:用kmem_cache_create创建的缓存对象

例子如下:


 

猜你喜欢

转载自blog.csdn.net/yldfree/article/details/81185652