内存对齐三个原则
2018-06-26 本文已影响44人
七维树
1.结构体的总大小,必须要是其内部最大成员的整数倍,不足的要补齐。
typedef struct one {
char a;=====> 1 -> 4
int b;======> 4
double c;===> 8. //max
char d;=====> 1 -> 8 //补齐到8的整数倍
} ONE:
结构体one总大小: 4+4+8 = 16
2.结构体或联合的数据成员,第一个数据成员是要放在offset == 0的地方,如果遇上子成员,要根据子成员的类型存放在对应的整数倍的地址上。
typedef struct two {
char array[2];==> 2 -> 4
int b;==========> 4
double c;=======> 8 //max
float d;========> 4 -> 8 //原则1
} TWO;
结构体two总大小: 4+4+8+8 = 24
3.如果结构体作为成员,则要找到这个结构体中的最大元素,然后从这个最大成员的整数倍地址开始存储。
struct three {
char a; ====> 1 -> 4
int b;======> 4
double c;===> 8
short d;====> 2 -> 8 //原则3 ,下面是个结构体,其中最大成员为8,则需要从8的整数倍地址存放,所以变量d补齐到8
TWO e; ==> 24 (max 8)
};
结构体two总大小: 4+4+8+8+24 = 48