C++ 结构体和联合体

定义

联合体

使用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则是连续的内存空间。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yasuofenglei/article/details/108527750