下面的结构体中包含了一个零长度的数组
struct ib_pkey_cache {
int table_len;
u16 table[0];
};
那如果要定义一个这个结构体的指针的话,申请的空间改怎么计算呢?
可以参看下面的code
struct ib_pkey_cache *pkey_cache = NULL;
pkey_cache = kmalloc(struct_size(pkey_cache, table, tprops->pkey_tbl_len),
GFP_KERNEL);
if (!pkey_cache)
goto err;
这段code 用tprops->pkey_tbl_len 来表示要给原本零长度数组分配的空间,然后用
struct_size来计算整个结构体的长度。
其中struct_size 是一个宏,实现如下:
#define struct_size(p, member, n) \
__ab_c_size(n, \
sizeof(*(p)->member) + __must_be_array((p)->member),\
sizeof(*(p)))