[英]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.