一:为什么要存在内存对齐
对与计算机而言,一次性可以取出处理的单元大小为字,在32位系统下,一次性可以取出4个字节,而在64位系统下,一次性可以取出8个字节,而一个地址对应一个内存单元,如果计算机按照挨着一个字节一个字节的来存储数据,那么计算机的内存一定是最节省的状态,但是很可能会造成计算机取一条数据取两次的情况,为了防止这种情况,就出现了内存对齐(以空间换时间的一种策略)
例如
int i doble e 红色存储i,粉色存储e,这样我们会发现我们取出e时要取出两次,影响整体效率
但是我们可以这样
这样取出e就只会取出一次
二:内存对齐的规则
1.第一个成员从偏移量为0的地址开始存储
2.后面的每一个成员的存储都要在偏移地址为操作数的最小倍数的地方开始存储
3.操作数为成员大小与默认操作数中最小的一个,window下的默认操作数为8,Linux没有
4.内存单元的整体大小为成员内最大对齐数的整数倍
例如struct A
{
char i;
int b;
char c;
}
Struct B
{
char i;
char c;
int b;
}
A的大小为12, B的大小为8
A的大小,i是红色,b是黄色,c是粉色,绿色是填充
B的大小