2015-04-07 137 views
1

我想組裝一個特定的結構來傳遞給函數的信息。該函數將地址和大小作爲參數。此外,信息的結構由技術文件給出,但包含動態部分。動態部分由重複的結構組成。
因此,想到在結構中使用結構數組。結構體內動態數組結構(在內核模塊中)

一個最小的例子看起來是這樣的:

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,但我真的想避免定義大小的數組和浪費所有的記憶。

回答

0

保持的一個指針結構

struct pdo_s *pdos; 

和分配內存動態

pdos = malloc(sizeof(struct pdo_s)); 

通過這種方式,您分配所需的內存,並保留通過對同一指針做realloc()增加內存。

可以在堆或堆一次分配255層結構。

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

struct pdo_s pdos[255]; 
+0

不幸的是'realloc的()'是不是在內核空間可用。 – Loofmann

+0

'malloc()'可用,'realloc()'不可用?奇怪!然後我認爲你需要在內存中分配255個結構 – Gopi

+0

更確切地說:在一個內核模塊中,你可以使用:'kmalloc()''''''''''''''''''' – Loofmann