不同规模成员联合的记忆布局?

cpu*_*uer 20 c unions

typedef union epoll_data
{
  void        *ptr;
  int          fd;
  __uint32_t   u32;
  __uint64_t   u64;
} epoll_data_t;
Run Code Online (Sandbox Code Playgroud)

这里int__uint32_t4个字节,而其他8个字节.

当我们设置fd为a时int,它是位于前4个字节还是后4个字节,还是依赖于字节序?

有些理由值得赞赏.

Ada*_*eld 31

它位于前4个字节.根据C99标准§6.7.2.1/ 14:

联合的大小足以包含其最大的成员.最多一个成员的值可以随时存储在union对象中.指向适当转换的union对象的指针指向其每个成员(或者如果成员是位字段,则指向它所在的单位),反之亦然.

这意味着联盟所有成员的地址是相同的.

  • @ user209051:错了.假设您的意思是图3-6(3-5是一个结构),请注意位图的右侧是低地址,左侧是高地址.填充发生在成员之后(具有更高的地址). (8认同)