加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 由kmalloc()分配的内存是否自动释放?

发布时间:2020-12-13 19:03:58 所属栏目:Linux 来源:网络整理
导读:我正在编写一个设备驱动程序,除其他外,用kmalloc分配一块内存.用户程序关闭文件时释放此内存.在我的一个实验中,用户程序在没有关闭文件的情况下崩溃. 有什么东西可以释放这段记忆吗? 在另一个实验中,我将kfree()从close()函数移动到module_exit()函数.当我

我正在编写一个设备驱动程序,除其他外,用kmalloc分配一块内存.用户程序关闭文件时释放此内存.在我的一个实验中,用户程序在没有关闭文件的情况下崩溃.

有什么东西可以释放这段记忆吗?

在另一个实验中,我将kfree()从close()函数移动到module_exit()函数.当我连续两次运行用户程序时,我使用与之前相同的指针再次调用kmalloc,而不是先释放它.因此,我丢失了指向该内存的指针,并且无法释放它.

在我重新启动之前,这个内存是否会丢失到系统中,或者在我卸载驱动程序时它是否会被释放?

最佳答案
内核内存永远不会自动释放.这包括kmalloc.

文件关闭时,应释放与打开文件描述符相关的所有内存.
当进程因任何原因退出时(包括kill -9),所有打开的文件描述符都会关闭,并且会调用驱动程序的close函数.因此,如果你在那里释放,那么进程无法做任何事情都会使进程终止后内存保持不变.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读