内存对齐
关于结构体的内存对齐问题
内存对齐的基本含义:
内存对齐指各种数据存放的地址要能够整除该数据本身的字节数。主要用于不同设备之间的数据交换。
比如说:
char类型课存放任意地址,int存放被4整除的地址,double存放被8整除的地址。
对齐规则具体如下
注意!一般情况下,为了获取更快的速度,浪费一点儿内存相对来说更无关紧要
一、先将每个成员的字节数写出,然后从第二个成员开始,将前面成员的总字节数补齐成当前字节数的倍数
如图所示:char类型为一个字节,但是short类型为两个字节,要使前面成员的总字节数补齐成当前字节数的倍数,则要空出一个字节不存放东西。
struct B
{
char a;//1+7
double b;//8
short c;//2+2
int d;//4
};//24
struct E
{
char a;//1+3
int b;//4
float c;//4+4
double d;//8
};//24
struct G
{
char a;//1+1
short b;//2
int c;//4
double d;//8
};//16
struct D
{
char a;//1+3
int c;//4
short c;//2
};
二、结构体的总大小,一定要能整除单个成员最大类型的大小
在该结构体中单个成员最大类型大小为4,而依照规则一算下来的字节数应该为10,但是为了满足规则二所以要有两个字节空闲,所以该结构体的总字节数应该为12
三、对于一些特殊结构体
该结构体内嵌一个结构体,还是对应规则二,看单个字节大小