kmalloc、kzalloc 和 vmalloc 区别:
1. kmalloc/kfree: 所申请的内存物理连续,位于物理内存映射区域,对申请内存大小有限制,不能超过 128KB,给 DMA 控制器分配内存时,需要使用标志 GFP_DMA(DMA 要求分配的虚拟地址和物理地址连续),分配过程可以是原子过程,分配开销低。
2. kzalloc/kfree: kmalloc+memset(0)
3. vmalloc/vfree: 虚拟地址空间连续,物理不一定连续,分配的内存大小没有限制。当模块被动态加载到内核的时候,就将模块装载到由 vmalloc() 分配的内存上。