vmalloc
分配的内存只是线性地址连续,物理地址不一定连续,不能直接用于DMAkmalloc
分配的内存是线性地址和物理地址都是连续的,可以直接用于DMAkzalloc
实现了 kmalloc()+memset() 的功能,源码如下:
static inline void *kzalloc(size_t size, gfp_t flags)
{
return kmalloc(size, flags | __GFP_ZERO);
}
- devm_kzalloc
是具有资源管理的 kzalloc() ,使用资源管理(resource-managed)函数分配的内存,是会与所属设备相关联。当设备从系统中分离或者设备驱动被卸载,该内存会被自动释放,也可以通过 devm_kfree() 来释放内存。同理 socket_kzalloc() 等等。