对齐规则:
- 从内存偏移0开始存储
- 变量的起始位置是变量大小的整数倍
- 结构体总大小是最大元素的整数倍
- 如果有pragma pack(n),取n 和变量大小中小的那个
#include <iostream>
using namespace std;
struct st1
{
char a ;
int b ;
short c ;
};
struct st2
{
short c ;
char a ;
};
int main()
{
cout<<"sizeof(st1) is "<<sizeof(st1)<<endl;
cout<<"sizeof(st2) is "<<sizeof(st2)<<endl;
return 0 ;
}
输出为:
12
8
好处
- 平台(移植原因):不是所有平台都能访问任意地址的,有的只能访问特定的地址,不然会抛出异常
- 性能原因: 经过内存对齐之后, cpu 的速度大大提升.因为cpu 是整块整块读取内存的,对齐内存之后,不用对内存块进行剪接拼接就能得到数据.