繁体   English   中英

C结构中的对齐/填充

[英]alignment/padding in C structure

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

以下是定义的结构:

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

我的问题是,为什么我们在上述结构中处于中间。

我教过编译器如何按照下面的链接所述进行对齐。 http://vcfaq.mvps.org/lang/11.htm

无论上述结构如何,我都会概括我的问题。在什么情况下,我们必须以编程方式进行调整,什么情况下编译器将为我们做到这一点?

如果两台机器的字节序类型不同(例如,一个m / c为大字节序而另一字节为低字节序),是否需要填充?

请澄清我的问题。

谢谢!

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

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

默认情况下,编译器将数据对齐为最大可对齐字节,具体取决于计算机。 对于Linux,GCC编译器默认情况下执行4字节对齐。

如果要对齐8、16、32等字节,则需要明确告知编译器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM