0

我正在查看我的项目中的代码。

以下是定义如下的结构:

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

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

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

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

如果两台机器具有不同的字节序类型,即一台 m/c 是大字节序而另一台是低字节序,是否需要填充?

请澄清我的问题。

谢谢!

4

2 回答 2

0

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

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

于 2012-04-26T07:08:02.887 回答
0

编译器默认对齐数据以获得最大可对齐字节,这取决于机器。对于 linux GCC 编译器默认进行 4 字节对齐。

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

于 2012-04-26T07:16:38.263 回答