c - C 结构中的对齐/填充

标签 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 是大字节序,另一个是低字节序,是否需要填充?

请澄清我的问题。

谢谢!

最佳答案

我想它的存在是为了清楚地表明该位置将有一个填充字节。如果将来有人想添加字节字段,这可能很有用。

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

关于c - C 结构中的对齐/填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10328126/

相关文章:

c - printf 打印数组的多个元素

c - 从标准输入 block 读取大约。 60 KB

c - 确定错误的原始原因

c - 为什么带变量的数组分配有效?

c - C 中的堆栈实现

iphone - 为此编写宏 : (Objective-C)

c++ - 获取时间作为文件名

c - 手动计算C中字符串中的字符数

c - MagickCore - 卡在 ReadImage 之后

c - C语言中如何清除缓冲区?