c语言 - 为什么全局变量不应该在 linux 内核中初始化为 0 / NULL / false?



我使用来自linux内核的checkpatch.pl脚本用于我自己的固件,因为我使用相同的编码风格(我喜欢)。

有一个错误,我不太理解全局变量:

不将全局变量初始化为0

当然我想避免使用全局尽可能多,但不知道为什么这是一个风格错误?

是因为一些编译器不把这样的全局变量放在。bss吗?(通常他们足够聪明)

首先,它是冗余的,并且增加了内核的大小(不是最终加载的大小,而是通过向链接器提供不必要的显式指令)。

这是一个更大问题的一部分:假设您有两个不同的目标文件要链接在一起,并且对如何初始化它们有不同的想法。然后链接器必须检测到这一点并产生符号冲突错误。脚本也与此有关。

进一步阅读:

  • 。boss vs COMMON:什么去哪里?
  • C - .bss段中未初始化的全局数据与通用符号
  • Shared Libraries Redux (Ian Lance Taylor)

最新更新