包含零长度数组的结构体申请内存

下面的结构体中包含了一个零长度的数组
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)))

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值