Linux中用到的零长数组

来源:互联网 发布:网络电话软件排行 编辑:程序博客网 时间:2024/06/08 17:46

零长数组一般用于在预先不知道结构体具体大小,而进行的一种动态内存分配方式,在Linux中是较为广泛使用的,例如像sk_buff、devres结构体;

下面的结构体(设备资源结构体)便用到了零长数组:

struct devres {struct devres_nodenode;/* -- 3 pointers */unsigned long longdata[];/* guarantee ull alignment */};
struct devres_node {struct list_headentry;dr_release_trelease;#ifdef CONFIG_DEBUG_DEVRESconst char*name;size_tsize;#endif};


devers中的data是个零长数组,对应于res资源分配;当devres分配的空间大于三个字节数(devres_node长度)时,data域便可以访问到那多出来的数据部分,即资源数据;由于设备资源的不确定性,所以用到这个零长数组是非常必要的,可以灵活分配所需要的的内存空间。

Linux中的许多设计思路涉及到“抽象”的概念,例如本例中,对于设备资源 就是一种抽象概念,对于预先分配多少存储空间我们是无法确定的,于是零长数组就有了用武之地。

0 0
原创粉丝点击