c++ 具有一个成员的结构的大小是否与成员的大小相同?

dly7yett  于 5个月前  发布在  其他
关注(0)|答案(3)|浏览(57)

给定

struct S {
  SomeType single_element_in_the_struct;
};

字符串
是否总是这样,

sizeof(struct S) == sizeof(SomeType)


或者它可能是依赖于实现的?

uajslkp6

uajslkp61#

通常情况下是这样的,但不能保证。
任何结构都可以在结构的结尾处使用未命名的填充字节,但这些字节通常用于对齐目的,如果只有单个元素,则不必担心。

vxf3dgd4

vxf3dgd42#

由于结构填充,它不必相等。
section 6.7.2.1 in the C99 standard声明“在结构对象中可能有未命名的填充,但不是在其开始处”。
这被称为结构填充。可以添加填充以确保结构在内存中正确对齐。如果您更改其成员的顺序,则结构的exakt大小可能会更改。

kulphzqa

kulphzqa3#

这取决于你的编译器的封装。通常一个结构的大小可以被你的系统的字长整除(例如4字节== 32位)。
所以你经常会有sizeof(struct S) > sizeof(SomeType)
对于大多数编译器,你可以使用编译器编译指示来修改打包大小。如果你设置了#pragma pack(1),那么大小应该相等。

相关问题