千家信息网

Linux中devm_kmalloc和devm_kzalloc内核内存分配函数如何使用

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,今天就跟大家聊聊有关Linux中devm_kmalloc和devm_kzalloc内核内存分配函数如何使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以
千家信息网最后更新 2026年10月31日Linux中devm_kmalloc和devm_kzalloc内核内存分配函数如何使用

今天就跟大家聊聊有关Linux中devm_kmalloc和devm_kzalloc内核内存分配函数如何使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

一、devm_kmalloc

文件:drivers/base/devres.c,定义如下:

/** * devm_kmalloc - Resource-managed kmalloc * @dev: Device to allocate memory for * @size: Allocation size * @gfp: Allocation gfp flags * * Managed kmalloc.  Memory allocated with this function is * automatically freed on driver detach.  Like all other devres * resources, guaranteed alignment is unsigned long long. * * RETURNS: * Pointer to allocated memory on success, NULL on failure. */void * devm_kmalloc(struct device *dev, size_t size, gfp_t gfp){    struct devres *dr;    /* use raw alloc_dr for kmalloc caller tracing */    dr = alloc_dr(devm_kmalloc_release, size, gfp, dev_to_node(dev));    ...    set_node_dbginfo(&dr->node, "devm_kzalloc_release", size);    devres_add(dev, dr->data);    return dr->data;}

devm_kmalloc()函数通过alloc_dr() 申请设备资源,alloc_dr()调用流程如下:

alloc_dr()->                                   ## devres.c    kmalloc_node_track_caller()->               ## slab.h        kmalloc_track_caller()->                ## slab.h            __kmalloc_track_caller()->          ## salb.c                __do_kmalloc()                  ## 类似kmalloc实现

然后通过devres_add()添加到设备资源列表中。

后续在设备资源管理(device resource management)中详细介绍。

二、devm_kzalloc

文件:include/linux/device.h,定义如下:

static inline void *devm_kzalloc(struct device *dev, size_t size, gfp_t gfp){    return devm_kmalloc(dev, size, gfp | __GFP_ZERO);}

devm_kzalloc()函数使用的参数和返回值同devm_kmalloc()。区别:内存分配成功后清零。

注:

1)devm_kmalloc()和devm_kzalloc()是具有资源管理的kmalloc()和kzalloc()。与所属设备关联,在probe函数中使用。当设备驱动被卸载时,该内存被自动释放,也可使用devm_kfree()函数直接释放。

2)kmalloc()和kzalloc()申请的内存必须调用kfree()释放。

三、devm_kfree

文件:drivers/base/devres.c,定义如下:

/** * devm_kfree - Resource-managed kfree * @dev: Device this memory belongs to * @p: Memory to free * * Free memory allocated with devm_kmalloc(). */void devm_kfree(struct device *dev, void *p){    int rc;    rc = devres_destroy(dev, devm_kmalloc_release, devm_kmalloc_match, p);    WARN_ON(rc);}

看完上述内容,你们对Linux中devm_kmalloc和devm_kzalloc内核内存分配函数如何使用有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

函数 内存 设备 资源 分配 内容 文件 内核 资源管理 管理 成功 参数 所属 更多 流程 知识 篇文章 行业 设备驱动 资讯 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 博彦科技互联网金融 科技互联网企业 科技互联网政务服务 互联网金融公司科技 互联网科技小贷 北京互联网络科技有限公司 融势互联网科技 深圳国际航运科技和互联网 昭通云南众福互联网科技有限公司 华服互联网科技官网 互联网科技产业特征 阿里互联网科技企业 无锡工业互联网科技有限公司 北京市互联网新科技 半导体行业属于互联网高科技类吗 全球科技与互联网公司市值变化 世界互联网科技成果奖 上海旺乐尼互联网科技有限公司 中国主要互联网科技公司 广州全民伙伴互联网科技有限公司 互联网科技公司经营范围 上海互联网科技有限公司 互联网 卓越科技 贷财互联网科技 北京禾田雨橡互联网科技 科技伦理 互联网公司 上海电发互联网科技有限公司 梅州GM互联网络科技有限公司 唐山双旺合互联网科技产业园 北京品多多互联网科技有限公司
0