考虑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之间发生变化?若然,何时?或者文档是否已过时?我错过了什么?