首页 > 其他分享 >kmalloc vmalloc

kmalloc vmalloc

时间:2022-10-10 19:35:03浏览次数:45  
标签:kmalloc vmalloc kzalloc 分配内存 内存 分配

 

kmalloc()、kzalloc()、vmalloc() 的共同特点是:

用于申请内核空间的内存;
内存以字节为单位进行分配;
所分配的内存虚拟地址上连续;
kmalloc()、kzalloc()、vmalloc() 的区别是:

kzalloc 是强制清零的 kmalloc 操作;(以下描述不区分 kmalloc 和 kzalloc)
kmalloc 分配的内存大小有限制(4MB),而 vmalloc 没有限制;
kmalloc 可以保证分配的内存物理地址是连续的,但是 vmalloc 不能保证;
kmalloc 分配内存的过程可以是原子过程(使用 GFP_ATOMIC),而 vmalloc 分配内存时则可能产生阻塞;
kmalloc 分配内存的开销小,因此 kmalloc 比 vmalloc 要快;
使用场合:

一般情况下,内存只有在要被 DMA 访问的时候才需要物理上连续,但为了性能上的考虑,内核中一般使用 kmalloc(),而只有在需要获得大块内存时才使用 vmalloc()。例如,当模块被动态加载到内核当中时,就把模块装载到由 vmalloc() 分配的内存上。对于需要对分配的内存清零操作的,可以直接利用kzalloc来申请。

=========================================================

注意:vmalloc() 和 vfree() 可以睡眠,因此不能从中断上下文调用

kzalloc() 对应的内存释放函数也是 kfree()

 

参考:
原文链接:https://blog.csdn.net/m0_37765662/article/details/107905103

标签:kmalloc,vmalloc,kzalloc,分配内存,内存,分配
From: https://www.cnblogs.com/rebrobot/p/16776889.html

相关文章