1.作用:内存对齐的主要作用包括提高性能、优化内存访问、增强代码可读性和维护性,以及提高系统的稳定性和可靠性。
2.内存对齐的定义:一个变量的内存首地址位于该变量长度的整数倍上,则被成为内存对齐。
3.定义的规则:
(1)有效对齐值:给定的对齐系数与结构体(以结构体为例)中最长数据类型长度相比较小的那一个。
(2)在(1)的基础上,结构体中每个成员相对于结构体首地址的偏移量应为成员数据长度与有效对齐值相比较较小的那个的整数倍。
(3)结构体的总大小应为有效对齐值的整数倍。
举例说明:
给定系数为8byte(#pragma pack(8)),结构体s1中最长数据类型为int,长度为4byte,4<8,所以有效对齐值为4。设s1的首地址为0,内存依次增加。a的长度为1byte,所以a的地址偏移量为1的整数倍,则放在地址0处即可。同理int是4byte,4=4,b的地址偏移量为4的整数倍,则存放在地址4处。s是2byte,则存放在地址8处。此时,4+4+2=10,不符合规则(3),所以要多开辟2个byte的内存,故该结构体的总大小为12byte。
#include <stdio.h>
#include <string.h>
#pragma pack(8)
int main(){
struct s1{
char a;
int b;
short s;
}s1;
printf("%d\n",sizeof(s1));
}