Расширить массив модуля ядра Linux

У меня есть массив

char* temp;
temp=kmalloc(3,GFP_KERNEL);

Мне нужно расширять этот массив каждый раз, когда я вызываю эту функцию. Примечание: Realloc не может быть использован в ядре Linux, я не знаю, существует ли он

4 ответа

Решение

Прокрутите свой собственный realloc, но имейте в виду, что realloc - плохо разработанный интерфейс функций. Просто выделите новый буфер с помощью kmalloc и memcpy старых данных в новый буфер; это по сути все, что делает realloc, если не может расширить буфер на месте.

<linux/slab.h> имеет krealloc() идти с kmalloc(), Это было добавлено в 2007 / ядро ​​2.6.22.

Я бы посоветовал вам использовать кольцевой буфер фиксированного размера на основе mmapped памяти (или чего-то в этом роде) вместо того, чтобы каждый раз расширять выделение.

Вы, вероятно, хотите использовать что-то вроде реализации Flexible Array в Linux. См. http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=Documentation/flexible-arrays.txt;h=df904aec99044f8056ac530b9e9dc6de8f26f73e;hb=HEAD

Другие вопросы по тегам