【发布时间】:2018-02-01 08:39:25
【问题描述】:
我想为 Linux 创建一个可加载的内核模块。 这是代码
#include <linux/module.h>
#include <linux/init.h>
static int __init mymodule_init(void)
{
printk ("My module worked!\n");
return 0;
}
static void __exit mymodule_exit(void)
{
printk ("Unloading my module.\n");
return;
}
module_init(mymodule_init);
module_exit(mymodule_exit);
MODULE_LICENSE("GPL");
现在注意__init 宏。正如文档所说:
__init 宏向编译器指示该关联函数 仅在初始化期间使用。编译器放置所有标记的代码 使用 __init 进入一个特殊的内存部分,该部分在之后被释放 初始化
我试图理解为什么初始化方法最终会导致内存泄漏。是不是因为栈中函数调用的先进先出配置?
【问题讨论】:
-
以上引用中的什么表示内存泄漏?
-
需要将__init方法放在一个特殊的内存部分
-
"...在初始化后被释放"?对我来说似乎不是泄漏。
-
是由于堆栈中函数调用的 FIFO 配置 -- 什么?堆栈甚至不是 FIFO 结构。
标签: c linux-kernel macros