4

我有一个数组

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

我每次调用这个函数都需要扩展这个数组注意:Realloc不能在linux内核中使用我不知道它是否存在

4

4 回答 4

7

滚动你自己的 realloc 但请注意 realloc 是一个设计不佳的函数接口。只需使用 kmalloc 分配一个新缓冲区并将旧数据 memcpy 到新缓冲区中;如果它不能扩展缓冲区,这基本上就是 realloc 所做的一切。

于 2012-05-01T18:52:50.600 回答
4

<linux/slab.h>确实必须krealloc()kmalloc()。这是在 2007 / 内核 2.6.22 中添加的。

于 2012-05-01T22:40:51.123 回答
1

我建议您应该使用基于映射内存(或类似的东西)的固定大小的环形缓冲区,而不是每次都扩大分配。

于 2012-05-01T19:02:18.453 回答
0

您可能想要使用类似 Linux 的灵活数组实现之类的东西。请参阅 http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob;f=Documentation/flexible-arrays.txt;h=df904aec99044f8056ac530b9e9dc6de8f26f73e;hb=HEAD

于 2012-05-02T08:34:06.200 回答