__init 和 __exit 修饰符

static int __init initialization_function(void)
{
/* Initialization code here */

}

在内核模块中经常会看见这样的函数定义,声明中的__init标志看起来有点怪;它是一个给内核的暗示,

给定的函数只是在初始化使用。模块加载者在模块加载后会丢掉这个初始化函数,给它的内存可做其他用途。

一个类似的标签 (__initdata) 给只在初始化时用的数据. 使用 __init 和__initdata 是可选的, 但是它带来的麻烦

是值得的. 只是要确认不要用在那些在初始化完成后还使用的函数(或者数据结构)上.


static void __exit cleanup_function(void)
{
/* Cleanup code here */
}

__exit 修饰符标识这个代码是只用于模块卸载( 通过使编译器把它放在特殊的 ELF 段). 

如果你的模块直接建立在内核里, 或者如果你的内核配置成不允许模块卸载, 标识为 

__exit 的函数被简单地丢弃. 因为这个原因, 一个标识 __exit 的函数只在模块卸载
或者系统停止时调用; 任何别的使用是错的.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值