内置内核驱动程序是否需要 kfree?
Do built-in kernel drivers need kfree?
对于编译到 Linux 内核中的设备驱动程序,是否应该使用相应的 kfree() 调用释放 kmalloc 的内存?
我说的是在初始化时分配一次的内存,而不是在驱动程序的生命周期内连续分配的内存。我认为释放分配的内存是不必要的,因为内置驱动程序的生命周期就是内核的生命周期。是的,分配的内存是驱动程序运行所必需的,驱动程序初始化后不能释放;即不可能有 __init 宏。
我没有看到上面的明确说明,想确定一下。
视情况而定。但是很少有模块(驱动程序)不能这样编译。而且这是一种很好的编程风格。
顺便说一下,您可以考虑使用设备管理的资源,例如通过 devm_kzalloc
分配的内存。它将处理探测阶段分配的资源,并允许您在那里清理错误路径。
对于编译到 Linux 内核中的设备驱动程序,是否应该使用相应的 kfree() 调用释放 kmalloc 的内存?
我说的是在初始化时分配一次的内存,而不是在驱动程序的生命周期内连续分配的内存。我认为释放分配的内存是不必要的,因为内置驱动程序的生命周期就是内核的生命周期。是的,分配的内存是驱动程序运行所必需的,驱动程序初始化后不能释放;即不可能有 __init 宏。
我没有看到上面的明确说明,想确定一下。
视情况而定。但是很少有模块(驱动程序)不能这样编译。而且这是一种很好的编程风格。
顺便说一下,您可以考虑使用设备管理的资源,例如通过 devm_kzalloc
分配的内存。它将处理探测阶段分配的资源,并允许您在那里清理错误路径。