具有一个成员的结构体的大小与该成员的大小相同吗?

问题描述 投票:0回答:3

给定

struct S {
  SomeType single_element_in_the_struct;
};

总是这样吗

sizeof(struct S) == sizeof(SomeType)

或者它可能依赖于实现?

c++ c sizeof datamember
3个回答
14
投票

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

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


13
投票

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

C99 标准中的第 6.7.2.1 节 指出“结构对象内可能有未命名的填充,但不在其开头”。

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


1
投票

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

所以你会经常有

sizeof(struct S) > sizeof(SomeType)

对于大多数编译器,您可以使用编译器编译指示修改打包大小。 如果你设置

#pragma pack(1)
那么大小应该相等。

© www.soinside.com 2019 - 2024. All rights reserved.