You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

移除Linux模块初始化函数的__init前缀会产生什么影响?

移除Linux模块初始化函数的__init标记后的行为分析
  • 首先明确__init宏的核心作用:它会将标记的函数放入模块ELF文件的.init.text特殊段中。当模块加载完成(内置模块则是系统启动完成后),内核会自动释放这个段占用的内存空间,以此节省系统内存资源——毕竟初始化函数通常只在模块加载时执行一次,后续不再需要。

  • 移除__init标记后,初始化函数会被编译器归类到模块的普通.text段,和模块内其他常规运行时函数处于同一区域。内核不会对这个段做自动释放操作。

  • 针对你提到的“不带__init前缀的初始化函数是否会一直保留到模块卸载”:是的。只要模块未被卸载,包含该初始化函数的.text段会一直驻留在内存中。只有当你执行rmmod之类的卸载命令时,模块的所有内存区域(包括.text段)才会被内核回收。

  • 额外补充:除非你的初始化函数存在后续被主动调用的需求(比如某些场景下需要重新触发初始化逻辑),否则不建议移除__init标记——保留它能有效减少模块长期占用的内存,这对内存资源紧张的系统尤为重要。

内容的提问来源于stack exchange,提问作者Long Jack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 15:52:34