动态申请内存函数差异

  • vmalloc
    分配的内存只是线性地址连续,物理地址不一定连续,不能直接用于DMA

  • kmalloc
    分配的内存是线性地址和物理地址都是连续的,可以直接用于DMA

  • kzalloc
    实现了 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() 等等。

你可能感兴趣的:(动态申请内存函数差异)