struct结构体内的对齐问题
truct结构体由于包含了不同的数据类型,而数据结构类型之间存在占用空间大小的问题,比如char型占用1字节,short int占用2字节,int、long int、指针、float占用4字节、double占用8字节(windows和linux中)。但计算机系统对基本数据类型可能允许地址做出了限制,要求某种类型的对象必须是2、4或8的倍数(为了简化处理器和存储系统之间的硬件设计——可以节省至少1根地址线)。
那么对于给出的一个struct类型数据,我们如何判断它占用多少空间呢?
很简单!我们按照对齐原则即可做出正确判断。但记住:即不是像某些教程说的用struct结构体中占用空间最大的那个变量的字节数乘以变量总数,也不是所有变量占用空间总和,然后补齐到占用最大空间变量所占用字节数的倍数。
对齐的最大空间变量所占的字节要为操作系统位数所占字节数的整数倍,比如32位Windows系统,对齐字节为4,8..
在此默认为32位的系统中测试
struct
{
int i;
char j;
int k;
char r;
int s;
}s;
void main()
{
cout<<sizeof(s)<<endl;
}
sizeof(s)=20
struct
{
int i;
char j;
char r;
int k;
int s;
}s;
sizeof(s)=16
truct
{
double i;
char j;
char r;
int k;
int s;
}s;
sizeof(s)=24
char k;
short s;
}s;sizeof(s)=16