如果我们在堆栈中创建这种类型的对象,是否可以保证该对象的内存将正确对齐?
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。如果ints 是 2 个字节,那么谁知道哪两个char元素将对应int于你的union(标准没有指定)?
如果要使用联合来访问 的各个字节int,请使用以下命令:
union {
int i;
char c[sizeof(int)];
};
由于每个成员的大小相同,因此可以保证它们占用相同的空间。这是我相信你想知道的,我希望我已经回答了。
是的,否则工会将毫无用处。