在结构中使用可变长度数组的最佳做法是什么? 说零长度数组结构填充
typedef struct foo_s {
uint32_t data_type;
uint16_t data_len;
uint8_t data[];
} foo_t;
在一个x86_64的机器用GCC 4.8,我得到
sizeof(foo_t) == 8, but
offsetof(foo_t, data) == 6
看起来就像是有差别的存在,DATA_LEN后无填充,但填充的结构。 我是否应该始终保持最大的成员以避免这种情况?即
typedef struct foo_s {
uint16_t data_len;
uint32_t data_type;
uint8_t data[];
} foo_t;
什么是使用var len数组的最佳做法?
sizeof返回8,因为当struct是一个数组的元素时,需要保持uint32_t仍然对齐。当然,你从来没有**将它们存储在一个数组中,所以忽略它。您对malloc的调用仅使用offsetof()+数组大小。 – 2014-08-27 23:23:10