我有两种结构的情况,它们组合成一个更大结构的成员。第一个是44个字节,第二个是1047.第二个结构以char结尾。摘录:
typedef struct
{
... (total of 44 bytes, all members naturally aligned)
} StructA;
typedef struct
{
...lots of stuff totaling 1046 bytes
char flag;
} StructB;
typedef struct
{
StructA a;
StructB b;
} StructC;
StructA和StructB的打印尺寸分别产生44和1047的预期尺寸。 structC的打印大小产生1092,即44 + 1047 + 1.由于StructB末尾的单字节,编译器填充整体结构似乎很清楚。但它最终......没有以下成员需要对齐。那么为什么填充StructC?为什么它不以同样的方式填充StructB?
这是使用Microsoft Visual Studio 2013构建的;我们也是跨平台的,但我还不知道Linux上的GNU编译器是否相同。如果没有,那也是一个问题。
谢谢你, 道格
跟进:
我的问题被标记为重复但转介并未回答我正在尝试解决的具体问题,这具体是为什么在一种情况下在结构的末尾添加填充,而在另一种情况下不添加填充。