我在讀TLDP,注意到所有的全局變量和函數都聲明爲靜態的。在進一步閱讀之後,我瞭解到變量聲明爲靜態,以減少名稱空間污染的。爲什麼linux內核中的全局變量是靜態的?
根據this SO後,
靜態函數是隻對在同一個文件(更準確地說是相同的翻譯單元)等 功能可見功能。
因此,將函數聲明爲靜態將減少名稱空間污染。但是,在變量的情況下,根據TLDP:
當一個靜態變量是由模塊修改,所有其他模塊將 看到新的值。
這會增加命名空間污染。不是全局靜態變量對同一個翻譯單元也是可見的嗎?如果是這樣,以上引用的聲明如何是真的?我似乎錯過了一些東西。
對於內核模塊,什麼是「程序」?它是整個內核還是隻是模塊? – daltonfury42
在全局變量方面,內核鏈接階段比用戶級程序更嚴格。內核構建可防止從模塊訪問任何全局變量,除非通過調用'EXPORT_SYMBOL'宏來顯式標記它們。 – kaylum
你能告訴我爲什麼所有的全局變量都需要聲明爲靜態的嗎? – daltonfury42