内存对齐三个原则

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
上一篇下一篇

猜你喜欢

热点阅读