我可以制作一个结构,其中超过一半的 space 是填充的吗?
Can I make a struct where more than half of the space is padding?
我刚刚开始学习结构中的填充。那么我可以只用一个字符(1 个字节)创建一个结构而不是填充 3 个字节是否正确?
是的,取决于您的填充和字节对齐设置。
我想你想要这个:
#pragma pack(push, 4)
struct {
...
}
#pragma pack(pop)
通常,C 实现不会填充包含单个单字节成员的结构。可以使用标准 _Alignas
关键字或其他方式强制进行更严格的对齐,在这种情况下,结构可能包含比数据更多的填充。
但是,我们可以创建填充多于数据的普通结构。考虑 C 实现中的 struct { char a; double b; char c; }
,其中 double
是八个字节并且需要八字节对齐。要布置此结构,实现必须在 a
和 b
之间插入(至少)七个字节的填充,并且必须在 c
之后再插入(至少)七个字节以使结构大小八个字节的倍数(这是必需的,以便此类结构数组中的元素保持其所需的对齐方式)。
此结构的成员中有十个字节的数据和十四个字节的填充。
我刚刚开始学习结构中的填充。那么我可以只用一个字符(1 个字节)创建一个结构而不是填充 3 个字节是否正确?
是的,取决于您的填充和字节对齐设置。
我想你想要这个:
#pragma pack(push, 4)
struct {
...
}
#pragma pack(pop)
通常,C 实现不会填充包含单个单字节成员的结构。可以使用标准 _Alignas
关键字或其他方式强制进行更严格的对齐,在这种情况下,结构可能包含比数据更多的填充。
但是,我们可以创建填充多于数据的普通结构。考虑 C 实现中的 struct { char a; double b; char c; }
,其中 double
是八个字节并且需要八字节对齐。要布置此结构,实现必须在 a
和 b
之间插入(至少)七个字节的填充,并且必须在 c
之后再插入(至少)七个字节以使结构大小八个字节的倍数(这是必需的,以便此类结构数组中的元素保持其所需的对齐方式)。
此结构的成员中有十个字节的数据和十四个字节的填充。