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对象的指针指向其每个成员(或者如果成员是位字段,则指向它所在的单位),反之亦然.
这意味着联盟所有成员的地址是相同的.