Linux内核内存管理?
Linux 内核会在模块释放后释放内核模块内存中的 kmalloc 而不是 kfree,就像它与用户空间应用程序一样吗?
Will Linux Kernel free kmalloc'ed and not kfree'd in kernel module memory after module release just like it's work with user space apps?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
内核不会对模块进行任何垃圾收集。如果模块
kmalloc
是一个内存块,并且在卸载模块之前没有kfree
它,则该块将保持分配状态并且无法访问,直到下次重新启动为止。The kernel will not do any garbage collection for a module. If the module
kmalloc
s a chunk of memory and doesn'tkfree
it before the module is unloaded, that chunk will stay allocated and inaccessible until the next reboot.正如其他人所说,内核不会对模块进行任何垃圾收集,但设备驱动程序可以使用
devm_*
类型的资源分配(称为托管资源分配函数),并且内核将在之后执行所有必需的清理工作没有更多关于该设备的参考。请参阅此处,了解内核源代码中 的注释源代码devm_kmalloc。
As others said, the kernel will not do any garbage collection for a module but device drivers can use
devm_*
types of resource allocations (called managed resource allocation functions) and the kernel will do all the required cleanups after there is no more reference to the device.See here for the commented source code in the kernel source for devm_kmalloc.