内核内存分配中kmem_cache_alloc
和kmalloc()
之间有什么区别?什么时候使用?
答案 0 :(得分:4)
Kmalloc - 从物理内存中分配连续区域。但请记住,分配和释放内存需要做很多工作。
Kmem_cache_alloc - 在这里,您的进程会保留一些预先分配的预定义大小对象的副本。假设你有结构,你知道你将非常频繁地需要,所以你不需要在需要时从主内存(kmalloc)中分配它,你已经分配了它的多个副本。如果需要,它会返回已分配的块的地址(节省大量时间)。同样地,当你释放它时,你不会放弃它,它实际上是不自由的,它会回到分配的池中,这样如果某个进程再次请求它,你就可以返回已分配结构的地址。
答案 1 :(得分:3)
kmalloc:它使用任何内核代码可用的通用slab缓存。所以你的模块将与内核中的其他组件共享slab缓存。
kmem_cache_alloc:它将从kmem_cache_create创建的专用slab缓存中分配对象。如果您特别需要专用于模块的更好的slab缓存管理,对于特定类型的对象,请使用kmem_cache_create,后跟kmem_cache_alloc。 USB / SCSI驱动程序使用它。 kmem_cache_create获取你想要创建slab的对象的sizeof,一个出现在/ proc / slabinfo中的名称和用于控制slab缓存行为的标志。
参考:https://www.mail-archive.com/kernelnewbies@nl.linux.org/msg13191.html& LDD