内存对齐
假设一个cpu一次只从内存中读取8个字节,那么cpu的只能读取0,8,16,24,...,倘若有一个结构体这么定义:
struct x {
int x;
double y;
};
结构体内存结构如下:

此时,若想读取 y 值,则cpu必须读取两次内存:第一次读取字节0-8,第二次读取字节9-16,然后将字节4-12组合成一个double类型,性能较低 。但如果采用下边的分配方法,只需读取一次即可(字节8-20),其中字节4-8是多余的,牺牲内存换来执行效率。

对齐规则
结构体内成员x的地址必须为 min(#pragma pack(), sizeof(x))的整数倍。
结构体s本身大小也要对齐,其大小为 min(#pragma pack(), max(sizeof(s.x)) )的整数倍,其中x 为 s 的各个成员。

浙公网安备 33010602011771号