1.为什么存在内存对齐:
平台原因:不是所有的硬件平台都能访问任意地址上的任意数据,某些硬件平台只能在某些地址处取某些特定类型数据,否则抛出硬件异常
性能原因:CPU在处理数据的时候并不是一个字节一个字节的处理,如果不进行内存对齐会导致处理次数变多,效率降低,可以说内存对齐是一种空间换时间的方法
2.如何修改默认对齐数:
利用#pragma这个预处理指令来修改
#pragmatic pack(5) //设置默认对齐数为5
#pragmatic pack() //取消设置的默认对齐数,还原为默认
3.计算结构体中某变量相对于首地址的偏移量
#include<stdio.h>
#define OFFSET(a,b) (char*)(&b)-(char*)(&a)
typedef struct A
{
float a;
char b;
int c;
}A;
int main()
{
A a;
printf("相对于首地址的偏移量为:%d\n",OFFSET(a,a.c));
}