Ich las TLDP und bemerkte, dass alle globalen Variablen und Funktionen als statisch deklariert wurden. Nach weiterem Lesen verstehe ich, dass die Variablen als statisch deklariert werden, um Namensraum Verschmutzung zu reduzieren.Warum sind globale Variablen im Linux-Kernel statisch?
Nach this SO Post,
statischen Funktionen sind Funktionen, die nur sichtbar für andere Funktionen in derselben Datei (genauer gesagt die gleiche Übersetzungseinheit) sind.
Das Deklarieren von Funktionen als statisch reduziert die Namensraumverschmutzung. Aber im Fall von Variablen, nach TLDP:
Wenn eine statische Variable von einem Modul geändert wird, werden alle anderen Module sehen den neuen Wert.
es würde Namespace Verschmutzung erhöhen. Sind globale statische Variablen nicht auch für dieselbe Übersetzungseinheit sichtbar? Wenn ja, wie die oben zitierte Aussage wahr ist? Mir scheint etwas zu fehlen.
Was ist bei einem Kernelmodul ein "Programm"? Ist es der gesamte Kernel oder ist es nur das Modul? – daltonfury42
Die Kernel-Link-Stufe ist strenger als Benutzer-Level-Programme in Bezug auf globale Variablen. Der Kernel-Build verhindert den Zugriff auf globale Variablen aus Modulen, es sei denn, sie werden explizit durch Aufruf des EXPORT_SYMBOL-Makros markiert. – kaylum
Können Sie mir sagen, warum alle globalen Variablen als statisch deklariert werden müssen? – daltonfury42