我在读TLDP,注意到所有的全局变量和函数都声明为静态的。在进一步阅读之后,我了解到变量声明为静态,以减少名称空间污染的。为什么linux内核中的全局变量是静态的?
根据this SO后,
静态函数是只对在同一个文件(更准确地说是相同的翻译单元)等 功能可见功能。
因此,将函数声明为静态将减少名称空间污染。但是,在变量的情况下,根据TLDP:
当一个静态变量是由模块修改,所有其他模块将 看到新的值。
这会增加命名空间污染。不是全局静态变量对同一个翻译单元也是可见的吗?如果是这样,以上引用的声明如何是真的?我似乎错过了一些东西。
对于内核模块,什么是“程序”?它是整个内核还是只是模块? – daltonfury42
在全局变量方面,内核链接阶段比用户级程序更严格。内核构建可防止从模块访问任何全局变量,除非通过调用'EXPORT_SYMBOL'宏来显式标记它们。 – kaylum
你能告诉我为什么所有的全局变量都需要声明为静态的吗? – daltonfury42