Основное различие штормовых памяти.
__init token
в ней намек на ядро, что данный function is used only at initialization time.
модуль Загрузчик drops the initialization function after the module is loaded, making its memory available for other uses.
Существует аналогичный тег (__initdata) для данных, используемых только в процессе инициализации. Использование __init и __initdata является необязательным, но это стоит того. Просто не забудьте использовать их для любой функции (или структуры данных), которую вы будете использовать после завершения инициализации.
Использование __init family of macros to place one-time initialization routines into a common section in the object file.
Его двоюродный брат __initdata, используемый для обозначения единовременных элементов данных. Функции и данные, помеченные как инициализация с использованием этих макросов, собираются в специально названный раздел ELF.
Позже, после использования этих одноразовых функций инициализации и объектов данных, kernel frees the memory occupied by these items
. Вы, возможно, видели сообщение знакомого ядра вблизи конечного части boot process saying, "Freeing init memory: 296K." .
Цель размещения этой функции в специальный раздел файла объектного так memory space that it occupies can be reclaimed when it is no longer needed.
'__init' и (в меньшей степень) '__exit' также полезны для загружаемых модулей ядра, а не только для встроенных. Их эффект такой же, как вы описали, за исключением того, что '__exit' инструктирует опустить отмеченную им функцию, если разгрузка модуля отключена, IIRC. – Eugene
@Eugene, hmm true и спасибо за исправление меня :-) –