Slab

https://www.ibm.com/developerworks/cn/linux/l-linux-slab-allocator/

https://blog.csdn.net/FreeeLinux/article/details/54575580

https://blog.csdn.net/lukuen/article/details/6935068

Slab分配器是一种内存管理方法。主要解决内部碎片,两个图片可以说明:

Slab_第1张图片


Slab_第2张图片

下面是无聊的部分:

slab中最高层的组织结构式cache_chain,是一个 slab 缓存的链接列表。其中每个kmem_chache都是一个对象池。

slab主要的API

创建一个新 kmem_chache

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

                       void (*ctor)(void*, struct kmem_cache *, unsigned long) );

从kmem_chache中分配一个对象

void kmem_cache_alloc( struct kmem_cache *cachep, gfp_t flags );

将一个对象释放回 kmem_chache

void kmem_cache_free( struct kmem_cache *cachep, void *objp );

销毁kmem_chache

void kmem_cache_destroy( struct kmem_cache *cachep );

slab是要主动管理的,一般我们写的驱动中都很少使用。kmalloc是slab的一种特殊用法,slab创建了2的幂次方的一些slab用于我们申请内存(一般小于8M)

你可能感兴趣的:(Slab)