如果我们在堆栈中创建这种类型的对象,是否可以保证该对象的内存将正确对齐?
union my_union
{
int value;
char bytes[4];
};
如果我们在堆栈中创建 char bytes[4] 然后尝试将其转换为整数,则可能存在对齐问题。我们可以通过在堆中创建它来避免这个问题,但是,联合对象有这样的保证吗?逻辑上应该有,但我想确认一下。
谢谢。
如果我们在堆栈中创建这种类型的对象,是否可以保证该对象的内存将正确对齐?
union my_union
{
int value;
char bytes[4];
};
如果我们在堆栈中创建 char bytes[4] 然后尝试将其转换为整数,则可能存在对齐问题。我们可以通过在堆中创建它来避免这个问题,但是,联合对象有这样的保证吗?逻辑上应该有,但我想确认一下。
谢谢。
嗯,这取决于你的意思。
如果你的意思是:
int
工会成员和工会成员是否会char[4]
正确对齐,以便我可以相互独立地使用它们?
好的。如果你的意思是:
int
和char[4]
成员是否保证对齐以占用相同数量的空间,以便我可以int
通过char[4]
?
那就不要。这是因为sizeof(int)
不保证是 4。如果int
s 是 2 个字节,那么谁知道哪两个char
元素将对应int
于你的union
(标准没有指定)?
如果要使用联合来访问 的各个字节int
,请使用以下命令:
union {
int i;
char c[sizeof(int)];
};
由于每个成员的大小相同,因此可以保证它们占用相同的空间。这是我相信你想知道的,我希望我已经回答了。
是的,否则工会将毫无用处。