static struct kmem_cache *my_cachep; static void init_my_cache( void ) { my_cachep = kmem_cache_create( "my_cache", /* Name */ 32, /* Object Size */ 0, /* Alignment */ SLAB_HWCACHE_ALIGN, /* Flags */ NULL, NULL ); /* Constructor/Deconstructor */ return; } |
使用所分配的 slab 緩存,您現在可以從中分配一個對象了。清單 2 給出了一個從緩存中分配和釋放對象的例子。它還展示了兩個其他函數的用法。
清單 2. 分配和釋放對象
int slab_test( void ) { void *object; printk( "Cache name is %s\n", kmem_cache_name( my_cachep ) ); printk( "Cache object size is %d\n", kmem_cache_size( my_cachep ) ); object = kmem_cache_alloc( my_cachep, GFP_KERNEL ); if (object) { kmem_cache_free( my_cachep, object ); } return 0; } |
最后,清單 3 演示了 slab 緩存的銷毀。調用者必須確保在執行銷毀操作過程中,不要從緩存中分配對象。
清單 3. 銷毀 slab 緩存
static void remove_my_cache( void ) { if (my_cachep) kmem_cache_destroy( my_cachep ); return; } |