联合占用的存储与预期不匹配

该联合包含 uint32、uint16 和 int8。使用 sizeof() 函数我发现它们占用了 4、2 和 1 个字节。所以联合应该包含 7 个字节。但它显示它只占用了 4 个字节。我不知道为什么...

int main(){
  union{
    uint16_t a;
    uint32_t b;
    int8_t c;
  }u1;
cout<<sizeof(u1)<<endl;
}

回答

来自C17 文档6.7.2.1,第 82 页,(16)

联合的大小足以包含其最大的成员。

uint32_t b是最大的成员,大小为 4 个字节。因此,联合的大小为 4 个字节。


以上是联合占用的存储与预期不匹配的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>