为什么全局变量在linux内核中是静态的?

时间:2016-10-04 20:18:57

标签: linux static linux-kernel

我正在阅读TLDP并注意到所有全局变量和函数都被声明为静态。在进一步阅读之后,我理解变量被声明为静态以减少名称空间污染

根据this SO帖子,

  

静态函数是仅对其他函数可见的函数   函数在同一个文件中(更准确地说是相同的翻译单元)。

因此将函数声明为static将减少命名空间污染。但是,就变量而言,根据TLDP

  

当模块修改静态变量时,所有其他模块都将   看到新的价值。

它会增加命名空间污染。同一翻译单元是否也可以看到全局静态变量?如果是这样,以上引用的陈述如何真实?我似乎错过了一些东西。

1 个答案:

答案 0 :(得分:2)

  

当模块修改静态变量时

我相信你错误地解释了这句话。这可能有点令人困惑。它不是指C static关键字。它指的是C标准对“静态存储持续时间”的使用。参见C标准第6.2.4节:

  

1对象具有确定其生命周期的存储持续时间。那里   是三个存储持续时间:静态,自动和已分配。

     

...

     

3一个对象,其标识符使用外部或内部链接声明,或者使用   storage-class specifier static具有静态存储持续时间。它的   生命周期是整个程序的执行

也就是说,“静态存储持续时间”变量包括全局变量和使用C static关键字声明的变量。在TLDP文章中,它指的是前者。