为什么输出 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));
}
int的大小与操作系统有关,不是固定的4字节,有可能是8字节
因为union按照4字节对齐。所以它实际使用5个字节,按照4字节对齐后就是8字节(比5大且能被4整除的最小的数是8)
首先要考虑内存对齐,32位操作系统是4字节对齐。
你的union中char数组占五字节,int四字节。取大者。5=4+1
剩下一字节因为四字节对齐。所以补充三字节0
最终占4+1+3