首页 > 其他 > 详细

devm_kzalloc分配的内存会在驱动卸载时自动释放

时间:2019-11-03 01:43:45      阅读:328      评论:0      收藏:0      [点我收藏+]

在gpio-button-hotplug.c里面,有这样的代码:

buttons = devm_kzalloc(dev, pdata->nbuttons * sizeof(struct gpio_keys_button),
           GFP_KERNEL);
if (!buttons) {
    dev_err(dev, "no memory for button data\n");
    return -ENOMEM;
}
memcpy(buttons, pdata->buttons, pdata->nbuttons * sizeof(struct gpio_keys_button));

bdev = devm_kzalloc(dev, sizeof(struct gpio_keys_button_dev) +
           pdata->nbuttons * sizeof(struct gpio_keys_button_data),
           GFP_KERNEL);
if (!bdev) {
    dev_err(dev, "no memory for private data\n");
    return -ENOMEM;
}

如果bdev内存申请失败,函数直接返回,buttons指针指向的内存空间会内存泄露吗?答案是不会。

因为这里buttons是用devm_kzalloc申请的,这个接口申请的内存会在驱动卸载的时候自动释放。这个函数是gpio_keys_button_probe,如果返回了失败,则驱动会被卸载掉,buttons指向的空间也就会被释放掉。所以这里的逻辑不会造成内存泄漏。

devm_kzalloc分配的内存会在驱动卸载时自动释放

原文:https://www.cnblogs.com/gimo/p/11784615.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!