1、什么叫数据的内存对齐?
所谓数据对齐,就是指存放数据的内存地址必须是“对齐单位”的整数倍,这样做是为了提高处理器的访问速度;
2、对齐单位怎么确定?
不同的平台都有一个默认的对齐单位,一般来说32位平台的默认对齐单位为4字节,64位平台的默认对齐单位为8字节,可以使用语句:#pragma pack(k)将平台的默认对齐单位设为k,同时也可以用#pragma pack()(即不加参数)将对齐单位设回默认值。对齐单位的选取还和数据的长度有关:
2.1、单个数据的对齐:
单个数据的对齐单位为数据长度和默认对齐单位的较小值:若默认对齐长度为4,一个short型数据的对齐单位为:min(4,sizeof(short)),即为2;一个double型数据的对其单位为:min(4,sizeof(double)),即为4;
单个数据占用内存大小:该数据类型的长度。
2.2、结构型数据的对齐:
结构型数据的对齐单位是结构中最长元素的长度和默认对齐单位的较小值,即min(默认, max(L(1), L(2), ... , L(N) )),L(i)为结构数据中每个元素的长度:如:
struct
{
char a;
int b;
double c;
}
若默认对齐单位为