C结构中的对齐/填充

时间:2012-04-26 06:13:57

标签: c

我正在浏览项目中的代码。

以下结构定义如下:

typedef struct {
    ULONG gatewayIp;
    UBYTE status;
        UBYTE align;
    UWORD info;
    ULONG magicTemp;
    uword stationCode;
} GatewayStatus;

我的问题是为什么我们在上述结构中保持一致。

我教过编译器负责对齐,如下面的链接所述。 http://vcfaq.mvps.org/lang/11.htm

无论上述结构如何,我都会概括我的问题 在什么情况下我们必须以编程方式对齐以及编译器将为我们做什么情况?

填充是否需要两个具有不同端序类型的机器,即一个m / c是大端,另一个是低端?

请澄清我的问题。

谢谢!

2 个答案:

答案 0 :(得分:0)

我想可以清楚地知道在那个位置会有一个填充字节。如果有人想在将来添加字节字段,这可能很有用。

另一个场景是,如果在没有对齐要求的系统上使用该结构(通常是8位体系结构的情况),但仍应具有与大型计算机上相同的布局。在这种情况下,struct定义需要显式填充。

答案 1 :(得分:0)

编译器默认情况下将数据对齐以获得最大可对齐字节,具体取决于计算机。对于linux,GCC编译器默认进行4字节对齐。

如果我们想要对齐8,16,32等字节,我们需要明确地告诉编译器。