相同类型的相邻结构成员是否在内存中相邻?
Are adjacent structure members of equal type adjacent in memory?
ISO9899:2011描述的语言(即C11),T
为完整数据类型,声明
struct { T a, b; } s;
我可以假设 &s.a + 1 == &s.b
吗? C语言两次改版之间情况有变化吗?
没有。该标准对结构填充没有要求或缺少结构填充,除了第一个成员之前不能有初始填充。
当然,每个结构成员都必须与其类型正确对齐。
不可移植。所有标准保证是结构中成员的偏移量严格增加。工具链可以自由添加它喜欢的任何填充。
ISO9899:2011描述的语言(即C11),T
为完整数据类型,声明
struct { T a, b; } s;
我可以假设 &s.a + 1 == &s.b
吗? C语言两次改版之间情况有变化吗?
没有。该标准对结构填充没有要求或缺少结构填充,除了第一个成员之前不能有初始填充。
当然,每个结构成员都必须与其类型正确对齐。
不可移植。所有标准保证是结构中成员的偏移量严格增加。工具链可以自由添加它喜欢的任何填充。