【问题标题】:Expand array linux kernel module展开array linux内核模块
【发布时间】:2012-05-01 18:45:28
【问题描述】:

我有一个数组

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

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

【问题讨论】:

    标签: c linux-kernel


    【解决方案1】:

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

    【讨论】:

    • 我不会继续做 3 字节 kmallocs 和 memcpy。只需在 1K 等较大的块中使用 kmalloc,然后您只需偶尔执行一次 realloc
    【解决方案2】:

    <linux/slab.h> 确实有 krealloc()kmalloc() 一起使用。这是在 2007 年/内核 2.6.22 中添加的。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:
        猜你喜欢
        • 2019-05-18
        • 1970-01-01
        • 2012-04-11
        • 2013-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-03
        • 2016-03-25
        相关资源
        最近更新 更多