考虑以下来自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
成员是打包的。
如果你sizeof struct rpldsk_packet
从 ELDK 发行版中使用 using ppc_85xxDP-gcc (GCC) 4.2.2,你会得到 24。使用 gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3 你会得到 20。也就是说,struct rpltime
它也包含在 Ubuntu GCC 上. 根据GCC 文档,我希望sizeof
任何 GCC 都为 24,包括 gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3。
packed
4.2.2 和 4.4.3 之间未打包成员的属性行为是否发生了变化?如果是这样,什么时候?还是文档过时了?我错过了什么?