在32位机器上
设有以下说明和定义:
1
2
3
4
5
6
7
8
9
10
11
|
typedef
union { long
i; int
k[5]; char
c; }
DATE; struct
data { int
cat; DATE
cow; double
dog; }
too; DATE
max; |
首先共用体里面你们肯定都是明白的,DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所以它的大小是20 。
但是到了结构体里面,其实它是这样的,首先一个Int,然后后面5个int,再然后是一个double,所以最大的成员长度是8不是20,然后6个int刚刚24,然后加上8是32,加上共用体是52,如果你把第一个Int cat去掉,你仍然会发现,结构体大小还是32,因为8个字节内存对齐,前面2个int一组,最后还单一个int也要占8个字节。