内存对齐的主要目的是为了减少cpu寻址的次数。
我们先来了解一下内存对齐的规则:
所定义变量的初始地址是该变量类型所占字节的整数倍。
比如int类型的变量,它的起始地址一定是4的整数倍,0,4,8等。
short 类型的变量的起始地址是2的整数倍,0,2,4,6,8等。
来看一个例子。
//64bit
#include<iostream>
#include<deque>
using namespace std;
struct node{
char a;
int b;
double c;
char f;
short d;
int e;
};
int main(){
cout<<sizeof(node)<<endl;
return 0;
}
// 24
在这个结构体中内存分配是这样的,一共占了24个字节。
这样我们cpu要找到b的地址,只需寻址4-7一次就ok。
假如内存不对齐
我们cpu就要先寻址0-3,留下1-3,然后寻址4-7,留下4,然后再把1-3和4 拼凑在一起,需要俩次寻址。
到此对内存对齐大家应该都理解了吧。