为什么成员结构在最后填充?

时间:2015-04-14 19:12:36

标签: c++

我有两种结构的情况,它们组合成一个更大结构的成员。第一个是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编译器是否相同。如果没有,那也是一个问题。

谢谢你, 道格

跟进:

我的问题被标记为重复但转介并未回答我正在尝试解决的具体问题,这具体是为什么在一种情况下在结构的末尾添加填充,而在另​​一种情况下不添加填充。

0 个答案:

没有答案