typedef union{
int b[5]; //20
long long c; //8
}DATA;
有如上这么一段程序片,int占用4个字节,long long占用8个字节,
使用sizeof计算如上DATA的空间大小时,
sizeof(DATA) = 24
而不是20。
关于union空间的计算,有如下几点需要注意:
关于第三点,举例说明,有如下代码片段:
DATA a;
printf("0x%x\n", &a);
memset(&a,0, sizeof(a));
a.b[0] = 0x11111111;
a.b[1] = 0x22222222;
a.b[2] = 0x33333333;
a.b[3] = 0x44444444;
a.b[4] = 0x55555555;
/* -----------分割线---------- */
a.c = 0x1122334455667788;
在分割线以前,内存中的数据是这样的,

而在执行了如下代码以后,
a.c = 0x1122334455667788;
内存区的数据变成了如下图所示,可以看到,继续赋值的话从变量地址头部开始覆盖掉了之前的数据。
