歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

Linux中用到的零長數組

零長數組一般用於在預先不知道結構體具體大小,而進行的一種動態內存分配方式,在Linux中是較為廣泛使用的,例如像sk_buff、devres結構體;

下面的結構體(設備資源結構體)便用到了零長數組:

struct devres {
	struct devres_node		node;
	/* -- 3 pointers */
	unsigned long long		data[];	/* guarantee ull alignment */
};
struct devres_node {
	struct list_head		entry;
	dr_release_t			release;
#ifdef CONFIG_DEBUG_DEVRES
	const char			*name;
	size_t				size;
#endif
};

devers中的data是個零長數組,對應於res資源分配;當devres分配的空間大於三個字節數(devres_node長度)時,data域便可以訪問到那多出來的數據部分,即資源數據;由於設備資源的不確定性,所以用到這個零長數組是非常必要的,可以靈活分配所需要的的內存空間。

Linux中的許多設計思路涉及到“抽象”的概念,例如本例中,對於設備資源 就是一種抽象概念,對於預先分配多少存儲空間我們是無法確定的,於是零長數組就有了用武之地。

Copyright © Linux教程網 All Rights Reserved