kmalloc和kmem_cache_alloc之间的区别

deb*_*air 9 linux-kernel

有什么区别kmem_cache_allockmalloc()内核内存分配?哪一个用的?

bro*_*oot 6

Kmalloc-从物理内存分配连续区域。但是请记住,分配和释放内存是很多工作。

Kmem_cache_alloc-在这里,您的进程保留了一些预分配大小的对象的一些副本。假设您有一个结构,知道您将经常需要它,所以您不必保留它的多个副本,而不必在需要时从主内存(kmalloc)分配它,并且在需要时,它返回的地址已分配的块(节省大量时间)。同样,当您释放它时,您不会将其还给您,实际上它并未被释放,它会返回到分配的池中,以便如果某个进程再次要求它,您可以返回已经分配的地址结构。


ale*_*lex 6

kmalloc:它使用可用于任何内核代码的通用平板缓存。所以你的模块将与内核中的其他组件共享slab缓存。

kmem_cache_alloc:它将从 kmem_cache_create 创建的专用slab缓存中分配对象。如果您特别想要专用于您的模块的更好的slab缓存管理,也适用于特定类型的对象,请使用kmem_cache_create,然后使用kmem_cache_alloc。USB/SCSI 驱动程序使用它。kmem_cache_create 获取要创建的slab 对象的大小、出现在/proc/slabinfo 中的名称以及用于控制slab 缓存行为的标志。

参考:https://www.mail-archive.com/kernelnewbies@nl.linux.org/msg13191.html & LDD