【发布时间】:2016-04-13 12:47:45
【问题描述】:
所以我在 C 中有一个这样定义的结构:
struct example {
int ex1;
u_long ex2;
float ex3;
float ex4;
};
所以示例的所有成员的大小都是 20,但示例的大小是 24,这意味着正在添加填充。我真正不明白的是为什么以及在哪里。
如果我的术语不正确,请原谅,但我认为由于它是 4 字节干净的(即所有成员的大小 % 4 == 0 ),因此不需要添加填充。是因为我正在运行 x86,它需要 8 字节干净,还是只是标准?
然后我真的不知道在哪里添加填充,我会假设围绕 u_long 但我不确定。
【问题讨论】:
-
您可以使用
offsetof宏来找出答案。 -
所有类型都没有明确定义的大小。您可能会在字段之间获得额外的填充。
-
感谢@JoachimPileborg!我最终在这里使用了stackoverflow.com/questions/9788679/… 的建议,因为我很懒,但我不知道宏的存在。