扩展数组Linux内核模块

5
我有一个数组
char* temp;
temp=kmalloc(3,GFP_KERNEL);

我需要在每次调用此函数时扩展该数组。 注意:在Linux内核中无法使用realloc,我不知道它是否存在。
4个回答

8

自己编写realloc函数,但请注意,realloc是一个设计不良的函数接口。只需使用kmalloc分配一个新缓冲区,并将旧数据memcpy到新缓冲区中即可。 如果无法原地扩展缓冲区,则这基本上就是realloc所做的所有事情。


3
我不会继续使用3字节的kmallocs和memcpy。只需以更大的块大小,如1K,使用kmalloc,那么您只需要偶尔进行一次realloc即可。 - TJD

4

<linux/slab.h>中有kmalloc()对应的krealloc()函数。这个函数是在2007年/内核2.6.22版本中添加的。


1
我建议您使用基于mmapped内存(或类似物)的固定大小环形缓冲区,而不是每次扩展分配。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接