结构体对齐
一:结构体数据成员对齐的意义:
实际的计算机系统对基本类型数据在内存中的位置有限制,要求这些数据的起始地址是某个数K的整数倍,这就是所谓的内存对齐,这个K称为该数据类型的对齐模数
这种要求可以简化处理器与内存之间传输系统的设计,还可以提升读取的速度
二:结构体对齐两方面含义
结构体总长度
结构体内各数据成员的内存对齐
三:结构体大小的计算方法过和步骤
1):将结构体内所有数据成员的长度相加
2):各数据成员为了内存对齐而填充的字节数加到总长度中
3):结构体对齐,结构体的总长度也应该是某个模数的整数倍,这个模数是 min(结构体中最长数据的长度,pragma pack)
4):在windows和linux系统中,模数的长度不同
例子:
#ragma pack(8)
strucy
{
char a;
long double b;
int c;
}
WINDOWS下
1+4+8 = 13
13+7 = 20
20+4 = 24