与union的内存对齐问题

时间:2010-12-21 05:02:46

标签: c++ unions memory-alignment

是否有保证,如果我们在堆栈中创建此类型的对象,那么此对象的内存将正确对齐?

union my_union
{
  int value;
  char bytes[4];
};

如果我们在堆栈中创建char字节[4]然后尝试将其转换为整数,则可能存在对齐问题。我们可以通过在堆中创建它来避免这个问题,但是,对于union对象有这样的保证吗?逻辑上应该有,但我想证实。

感谢。

2 个答案:

答案 0 :(得分:3)

嗯,这取决于你的意思。

如果你的意思是:

  

联盟的intchar[4]成员是否都要正确对齐,以便我可以相互独立地使用它们?

然后是的。如果你的意思是:

  

intchar[4]成员是否会保证对齐以占用相同数量的空间,以便我可以通过{{1}访问int的单个字节}}?

然后没有。这是因为char[4]不能保证为4.如果sizeof(int) s是2个字节,那么谁知道哪两个int元素对应于char int 1}}(标准没有指定)?

如果要使用联合访问union的单个字节,请使用:

int

由于每个成员的大小相同,因此可以保证占用相同的空间。这是我相信你想知道的,我希望我已经回答了。

答案 1 :(得分:2)

是的,否则工会将毫无用处。