【问题标题】:gcc will auto adjust structure sizegcc 将自动调整结构大小
【发布时间】:2019-03-09 04:49:32
【问题描述】:

您好,我有一个这样的定义结构:

typedef struct {
    unsigned short Limit;
    unsigned long Offset;
} DT_Info;

但是,它的实际大小是 16 字节而不是 10 字节。 “偏移量”将从 [DT_Info + 8] 开始。

有没有办法让编译器调整从 [DT_Info + 2] 开始的“偏移量”?

非常感谢!

【问题讨论】:

    标签: c gcc struct


    【解决方案1】:

    额外的空间是对齐的填充。如果您确定您的目标架构不需要它,您可以通过在声明中添加__attribute__((__packed__)) 来禁用它。

    【讨论】:

    • 在声明结构之前在哪里添加??或者使用结构的函数
    • struct{ 之间,或者在}; 之间。
    • 虽然在 pentium 这样的架构上,未对齐的数据只会导致轻微的性能损失,但请注意使用未对齐的数据会破坏您在大多数其他架构上的代码。在使用__attribute__((__packed__)) 时,您必须真正知道自己在做什么。您应该始终让编译器选择并使用sizeof() 来获取结构大小。
    猜你喜欢
    • 1970-01-01
    • 2020-06-24
    • 2021-11-25
    • 2018-02-06
    • 2015-03-13
    • 2013-12-16
    • 2015-06-16
    • 2011-04-02
    • 2013-07-16
    相关资源
    最近更新 更多