编译器对界与实际对界判决原则:
C++固有类型的对界取编译器对界方式(默认或指定)与自身大小中较小的一个.例如,指定编译器按2对界,int类型的大小是4,则int的对界为2和4中较小的2。
在默认的对界方式下,因为几乎所有的数据类型都不大于默认的对界方式8(除了long double),所以所有的固有类型的对界方式可以认为就是类型自身的大小。
更改一下上面的程序:
1 #pragma pack(2)
2 union u2
3 {
4 char a[13];
5 int b;
6 };
7
8 union u3
9 {
10 char a[13];
11 char b;
12 };
13 #pragma pack(8)
14
15 cout<<sizeof(u2)<<endl; // 14
16 cout<<sizeof(u3)<<endl; // 13
17
由于手动更改对界方式为2,所以int的对界也变成了2,u2的对界取成员中最大的对界,也是2了,所以此时sizeof(u2)=14。
结论:C++固有类型的对界取编译器对界方式与自身大小中较小的一个。