0

考虑以下来自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。

packed4.2.2 和 4.4.3 之间未打包成员的属性行为是否发生了变化?如果是这样,什么时候?还是文档过时了?我错过了什么?

4

0 回答 0