Расширить массив модуля ядра 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