内存对齐

假设一个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 的各个成员。

posted @ 2020-09-08 21:46  hellozhangjz  阅读(153)  评论(0)    收藏  举报