包含unpacked结构的GCC打包结构包含在4.4.3中

时间:2013-05-01 12:52:14

标签: gcc struct packed

考虑ttyrpld 2.60 include/rpl_packet.h的以下代码:

struct rpltime {
    uint64_t tv_sec;
    uint32_t tv_usec;
};

union rpldev_evmagic {
    uint32_t n;
    char m[4];
};

struct rpldsk_packet {
    union rpldev_evmagic evmagic;
    uint32_t size;
    struct rpltime time;
} __attribute__((packed));

也就是说,rpltime未打包,包含rpldsk_packet成员的rpltime已打包。

如果从ELDK发行版中使用ppc_85xxDP-gcc(GCC)4.2.2进行sizeof struct rpldsk_packet,则得到24.使用gcc(Ubuntu 4.4.3-4ubuntu5)4.4.3你得到20.这是,struct rpltime也包装在Ubuntu GCC上。根据{{​​3}},我预计sizeof对于任何GCC都是24,包含gcc(Ubuntu 4.4.3-4ubuntu5)4.4.3。

关于解压缩成员的packed属性的行为是否在4.2.2和4.4.3之间发生变化?若然,何时?或者文档是否已过时?我错过了什么?

0 个答案:

没有答案