【发布时间】:2011-01-18 18:48:20
【问题描述】:
在模块发布后,Linux 内核会释放内核模块内存中的 kmalloc'ed 而不是 kfree'd,就像它与用户空间应用程序一起工作一样?
【问题讨论】:
标签: memory-management memory-leaks linux-kernel linux-device-driver
在模块发布后,Linux 内核会释放内核模块内存中的 kmalloc'ed 而不是 kfree'd,就像它与用户空间应用程序一起工作一样?
【问题讨论】:
标签: memory-management memory-leaks linux-kernel linux-device-driver
内核不会对模块进行任何垃圾回收。如果模块kmallocs 一个内存块并且在模块被卸载之前没有kfree 它,则该块将保持分配状态并且不可访问,直到下一次重新启动。
【讨论】:
dlopen() 加载的模块,则完全相同的事情也适用于用户空间。
正如其他人所说,内核不会对模块进行任何垃圾收集,但设备驱动程序可以使用 devm_* 类型的资源分配(称为托管资源分配函数),并且内核将在没有垃圾回收之后执行所有必需的清理对设备的更多参考。
请参阅此处以获取devm_kmalloc 的内核源代码中的注释源代码。
【讨论】: