本文共 541 字,大约阅读时间需要 1 分钟。
下面的结构体中包含了一个零长度的数组struct ib_pkey_cache { int table_len; u16 table[0];};那如果要定义一个这个结构体的指针的话,申请的空间改怎么计算呢?可以参看下面的codestruct 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)))
转载地址:http://zpnmi.baihongyu.com/