还从网上找到共用体内存分配原则的文章,下面列几个例子说明:
1.Union data1{
double d;
int i;
char c1;
char c2[9];
};
sizeof(union data1)的值为16.在编译器默认设置的情况下,该共用体最大基本类型为double,它占8字节,所以此共用体以8来对齐。字符数组c2占9个字节,那么整个共用体应该占9个字节,但按照对齐原则,实际分配给它的内存为16字节。
2.Union data2{
int i;
char c1;
char c2[9];
};
sizeof(union data2)的值为12,该共用体占内存空间最大的基本数据类型为int,其长度为4,所以该共用体以4来对齐。该共用体的长度取决于字符c2,其长度为9,9不是4的倍数,要进行对齐,因此实际分配的存储空间为12.
3.Union data3{
char c1;
char c2[3];
};
sizeof(union data3)的值为3,该共用体占内存空间最大的基本数据类型为char,其长度为1,所以该共用体以1来对齐。该共用体的长度取决于字符c2,其长度为3,因此分配的存储空间为3。