4

如果我们在堆栈中创建这种类型的对象,是否可以保证该对象的内存将正确对齐?

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

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

谢谢。

4

2 回答 2

3

嗯,这取决于你的意思。

如果你的意思是:

int工会成员和工会成员是否会char[4]正确对齐,以便我可以相互独立地使用它们?

好的。如果你的意思是:

intchar[4]成员是否保证对齐以占用相同数量的空间,以便我可以int通过char[4]?

那就不要。这是因为sizeof(int)不保证是 4。如果ints 是 2 个字节,那么谁知道哪两个char元素将对应int于你的union(标准没有指定)?

如果要使用联合来访问 的各个字节int,请使用以下命令:

union {
  int i;
  char c[sizeof(int)];
};

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

于 2010-12-21T05:14:53.080 回答
2

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

于 2010-12-21T05:06:16.183 回答