来自:http://linux.chinaunix.net/bbs/viewthread.php?tid=913690
为了更好的得到问题解决,也对问题的提出进点义务,在抛出我的问题前先简单介绍一下Linux下slab高速缓存的使用方法。
在内核编程中,可能经常会有一些数据结构需要反复使用和释放,按照通常的思路,可能是使用kmalloc和kfree来实现。
但是这种方式效率不高,Linux为我们提供了更加高效的方法——Slab高速缓存管理器
通过先使用kmem_cache_create函数创建一个高速缓存的头指针——在内核中是struct kmem_cache结构,具体用法可以这样:
| struct
kmem_cache *
cachep =
NULL
;
cachep = kmem_cache_create( "cache_name" , sizeof ( struct yourstruct) , 0, SLAB_HWCACHE_ALIGN, NULL , NULL ) ; |
这样我们就获得了一个可用的cachep头指针。
当需要分配一个struct
yourstruct的结构体空间时,我们只需要调用kmem_cache_alloc函数,就可以获得一个足够我们使用的空间的指针(为什么我要说足够
呢?因为刚才的声明中我使用了一个标志——SLAB_HWCACHE_ALIGN,这个标志会让分配的空间对于硬件来说是对齐的,而不一定恰好等于
sizeof(struct yourstruct)的结果)。范例代码如下:
| struct
yourstruct *
bodyp =
NULL
;
bodyp = ( struct yourstruct * ) kmem_cache_alloc( cachep, GFP_ATOMIC & ~ __GFP_DMA) ; |
这样就可以使用bodyp指针所对应的空间存贮你需要的结构体信息了。
当用完结束后,我们需要释放空间,如何操作呢?代码很简单:
| kmem_cache_free( cachep, bodyp) ; |
本文介绍Linux内核中的Slab高速缓存管理器,它提供了一种比kmalloc和kfree更高效的内存管理方式。文章详细展示了如何创建高速缓存、分配及释放内存的具体步骤。
1883

被折叠的 条评论
为什么被折叠?



