union 内存分配问题:为什么输出 b 的大小是8?

为什么输出 b 的大小是8? char a[5]占5个字节,int4个字节,不是应该选较大的一个?
#include
typedef union myun
{
char a[5];
int b;
} a;
void main()
{
a b = {.b=10};

printf("%d\n", sizeof(b));

}

3个回答

因为union按照4字节对齐。所以它实际使用5个字节,按照4字节对齐后就是8字节(比5大且能被4整除的最小的数是8)

int的大小与操作系统有关,不是固定的4字节,有可能是8字节

首先要考虑内存对齐,32位操作系统是4字节对齐。
你的union中char数组占五字节,int四字节。取大者。5=4+1
剩下一字节因为四字节对齐。所以补充三字节0
最终占4+1+3

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问