具有单个元素的struct的大小

时间:2010-08-27 14:17:15

标签: c++ c

鉴于

struct S {
  SomeType single_element_in_the_struct;
};

总是如此

sizeof(struct S) == sizeof(SomeType)

或者它可能依赖于实现?

3 个答案:

答案 0 :(得分:13)

通常会出现这种情况,但不能保证。

任何结构可能在结构的末尾都有未命名的填充字节,但这些通常用于对齐目的,如果您只有一个元素,则不需要考虑。

答案 1 :(得分:12)

由于结构填充,它不必相等。

section 6.7.2.1 in the C99 standard 表示“结构对象中可能存在未命名的填充,但不是在其开头”。

这被称为结构填充。可以添加填充以确保结构在存储器中正确对齐。 如果更改其成员的顺序,结构的exakt大小可能会改变。

答案 2 :(得分:1)

这取决于编译器的打包。通常,结构的大小可以被系统的字长整除(例如,4字节== 32位)。

所以你会经常这样 sizeof(struct S) > sizeof(SomeType)

对于大多数编译器,您可以使用编译器编译指示修改包装大小。 如果你设置 #pragma pack(1) 然后尺寸应该相等。