Книга: Разработка ядра Linux
Функция kfree()
Функция kfree()
Обратной к функции kmalloc()
является функция kfree()
, которая определена в файле <linux/slab.h>
следующим образом.
void kfree(const void *ptr);
Функция kfree()
позволяет освободить память, ранее выделенную с помощью функции kmalloc()
. Вызов этой функции для памяти, которая ранее не была выделена с помощью функции kmalloc()
или уже была освобождена, приводит к очень плохим последствиям, таким как освобождение памяти, которая принадлежит другим частям ядра. Так же как и в пространстве пользователя, количество операций выделения памяти должно быть равно количеству операций освобождения, чтобы предотвратить утечку памяти и другие проблемы. Следует обратить внимание, что случай вызова kfree(NULL)
специально проверяется и поэтому является безопасным.
Рассмотрим пример выделения памяти в обработчике прерывания. В этом примере обработчику прерывания необходимо выделить буфер памяти для хранения входных данных. С помощью препроцессора определяется константа. BUF_SIZE
, как размер буфера памяти в байтах, который, скорее всего, должен быть больше, чем несколько байт.
char *buf;
buf = kmalloc(BUF_SIZE, GFP_ATOMIC);
if (!buf)
/* ошибка выделения памяти! */
Позже, когда память больше не нужна, нужно не забыть освободить ее с помощью вызова функции
kfree(buf);
- Функция kmalloc()
- 2.1.3. Функция getopt_long()
- Группировка по встроенным функциям и UDF
- 19.1.1. Функция jQuery()
- Функция strcmp( )
- Управление функциями узла
- Функция программного обеспечения
- 3.2. Ключи типа key_t и функция ftok
- 9.10. Функция sctp_recvmsg
- Функция document
- Функция generate-id
- Функция console.log