不同大小的成员联合的内存布局?

|
typedef union epoll_data
{
  void        *ptr;
  int          fd;
  __uint32_t   u32;
  __uint64_t   u64;
} epoll_data_t;
这里“ 1”和“ 2”是4个字节,其他则是8个字节。 当我们将
fd
设置为
int
时,它是位于前4个字节还是位于后4个字节,还是取决于字节序? 某些原因值得赞赏。     
已邀请:
        它位于前4个字节上。根据C99标准§6.7.2.1/ 14:   工会的规模足以容纳最多的成员。成员中最多一个的值可以随时存储在联合对象中。指向经过适当转换的并集对象的指针指向其每个成员(或者,如果成员是位字段,则指向它所驻留的单元),反之亦然。 这意味着工会的所有成员的地址都相同。     
        这实际上取决于该平台的ELF-ABI。请参见http://www.sco.com/developers/devspecs/abi386-4.pdf中第3.1节中给出的示例和图形。它表明,如果由于对齐限制而存在填充,则不必从低地址开始。     

要回复问题请先登录注册