定义
联合体
使用union定义的是联合体
利用union可以用相同的存储空间存储不同型别的数据类型,从而节省内存空间。当访问其内成员时可用".“和”->"来直接访问。
当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union)。在C Programming Language 一书中对于联合体是这么描述的:
1)联合体是一个结构;
2)它的所有成员相对于基地址的偏移量都为0;
3)此结构空间要大到足够容纳最"宽"的成员;
4)其对齐方式要适合其中所有的成员;
union Score{
double sc;
char level;
} //长度8
结构体
//使用struct定义的是结构体
struct Student{
char name[6];
int age;
Score s;
}
cout << sizeof(Score) << endl; //长度9
cout << sizeof(Student) << endl;//长度18
结构体数据对齐问题
结构体内存布局
注意:内存分配的原则,以最大的元素为基础,长度是最大元素长度的整数倍。
struct S1
{
char x; //1
double z; //8
short y; //2
}//长度为24字节。
struct S2
{
char x; //1
short y; //2
double z //8
} //长度为16
结构何数据缺省对齐原则
32位CPU
char:任何地址
short:偶数地址
int:4的整数倍地址
double:4的整数倍地址
- 修改默认编译选项
修改默认编译选
Visual C++:
#Pragma pack(n)
g++:
attribute(aligned(n))
attribute(packed)
例如:n改为1则是连续的内存空间。