【发布时间】:2010-11-07 04:34:41
【问题描述】:
我听说在 C 语言中,包含在结构中的数组可能在数组元素之间添加了填充。现在很明显,任何一对元素之间的填充量不能变化,或者用简单的指针算法计算数组中的下一个元素是不可能的。
这个谣言还说不包含在结构中的数组保证不包含填充。我至少知道那部分是真的。
所以,在代码中,谣言是:
{
// Given this:
struct { int values[20]; } foo;
int values[20];
// This may be true:
sizeof(values) != sizeof(foo.values);
}
我很确定sizeof(values) 将始终等于sizeof(foo.values)。但是,我无法在 C 标准(特别是 C99)中找到任何明确确认或否认这一点的内容。
有谁知道这个谣言是否在任何 C 标准中得到解决?
edit:我知道在数组foo.values 的末尾和结构foo 的末尾之间可能有填充,并且标准规定之间不会有填充foo 的开头和 foo.values 的开头。但是,有没有人引用或引用标准,它说foo.values的元素之间没有填充?
【问题讨论】:
-
我没有任何参考资料,但我很确定我已经读过编译器可以随意对齐结构。一般来说,这可能会以 cletus 描述的方式完成。
-
似乎很多人都错过了比较是在两个数组之间而不是在数组/结构之间。 sizeof(值) != sizeof(foo);这不是他所做的,而是人们似乎在某些答案中的想法