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