美文网首页
内存对齐三个原则

内存对齐三个原则

作者: 七维树 | 来源:发表于2018-06-26 14:36 被阅读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
    

    相关文章

      网友评论

          本文标题:内存对齐三个原则

          本文链接:https://www.haomeiwen.com/subject/dtfmyftx.html