struct内部结构的动态数组(在内核模块中)

时间:2015-04-07 14:13:41

标签: c struct kernel-module dynamic-arrays

我正在尝试组合某个结构,以获取将传递给函数的信息。此函数将地址和大小作为参数。此外,信息的结构由技术文档给出,但包含动态部分。动态部分由重复的结构组成 因此,我想到在结构中使用结构数组。

最小的例子可能如下所示:

struct nodeConfig_s{
  int pdoCount;
  int somethingElse;
  struct pdo_s{
    int flags;
    int dataLength;
    int id;
  } pdos[];
}

我明白pdos[]只是指向数组第一个元素的指针 但我想要实现的是结构数组将放在与外部结构相同的内存区域中。

有没有办法实现这一目标?应该注意的是,我依赖于GNU / Linux内核模块中可用的功能(2.6.37.6)


如果有办法管理链表中的信息(很容易消耗)并将它们放在一个内存块中(序列化?),我将不胜感激。


从文档中我知道pdos[]的最大大小是255,但我真的想避免定义那个大小的数组并浪费所有内存。

1 个答案:

答案 0 :(得分:1)

保留指向结构的指针

 struct pdo_s *pdos;

并动态分配内存

pdos = malloc(sizeof(struct pdo_s));

通过这种方式,您可以通过在同一指针上执行realloc()来分配所需的内存并继续增加内存。

您可以在堆或堆栈上一次分配255个结构。

pdos = malloc(sizeof(struct pdo_s) * 255);

struct pdo_s pdos[255];