Der wesentliche Unterschied des Speichers zu befreien.
Die __init token
in der es ist ein Hinweis auf den Kernel, dass die gegebenen function is used only at initialization time.
Die Modullader drops the initialization function after the module is loaded, making its memory available for other uses.
es einen ähnlicher Tag ist (__initdata) nur für Daten, die während der Initialisierung verwendet. Die Verwendung von __init und __initdata ist optional, aber es lohnt sich. Achten Sie darauf, sie nicht für irgendeine Funktion (oder Datenstruktur) zu verwenden, die Sie nach Abschluss der Initialisierung verwenden werden.
Verwendung der __init family of macros to place one-time initialization routines into a common section in the object file.
Ihr Cousin __initdata, verwendet, um einmalige Datenelemente zu markieren. Funktionen und Daten, die mit diesen Makros als Initialisierung markiert sind, werden in einem speziell benannten ELF-Abschnitt gesammelt.
Später, nachdem diese einmaligen Initialisierungsfunktionen und Datenobjekte verwendet wurden, die kernel frees the memory occupied by these items
. Sie haben vielleicht die bekannte Kernel-Nachricht in der Nähe des letzten Teil der boot process saying, "Freeing init memory: 296K." .
Der Zweck des Vergebens diese Funktion in einen speziellen Abschnitt der Objektdatei zu sehen ist, so dass die memory space that it occupies can be reclaimed when it is no longer needed.
'__init' und (in geringerem extent) '__exit' sind auch für die ladbaren Kernel-Module nützlich, nicht nur für die eingebauten. Ihre Wirkung ist die gleiche wie sie beschrieben wurde, außer dass "__exit" anweist, die damit markierte Funktion wegzulassen, wenn das Modul entladen ist, IIRC. – Eugene
@Eugene, hmm true und danke für die Korrektur :-) –