美文网首页
结构体内存分析

结构体内存分析

作者: 清描淡寫_ | 来源:发表于2020-09-08 13:37 被阅读0次

    一.结构体的构成

    结构体是由多个成员构成,成员的类型可以是基础数据类型(int、double、bool等)、指针或是其他的结构体。一下是一个结构体的例子:

    typedef struct PersonStruct {
        double height;      
        char   firstName;   
        int    age;         
        short  weight;      
    } PersonStruct;
    

    二.计算结构体尺寸大小的规则

    1.数据成员对齐规则:

    第一个数据成员要放在0的起始位置,之后的成员位置的起始位置要根据自身的大小的整数倍去存放。

    2.结构体作为成员:

    结构体作为成员时,自身的存储位置要根据结构内的最大成员的整数倍去存储

    3.收尾:

    结构体的总大小一定是结构体内最大成员的整数倍,实际大小如果不够,则需要进行补齐。

    以64位为例:

    height的大小为8,firstName的大小为1,age的大小为4,weight的大小为2。根据规则可得这些成员所占位置为:
    height:0-7
    firstName:8
    age:12-15
    weight:16-17
    可得结构体PersonStruct的实际大小为18,根据规则3以8的整数倍进行补齐可得PersonStruct的大小为24。


    图例.png

    根据图例可以看出,这样会出现留空的情况,会产生出较多的内存浪费,所以可以优化结构体的成员排列:

    typedef struct PersonStruct {
        double height;     
        int    age; 
        short  weight;
        char   firstName;  
    } PersonStruct;
    

    这样排列会使得结构体PersonStruct的大小由24变为16:


    更新排版.png

    降低了内存的占用。

    相关文章

      网友评论

          本文标题:结构体内存分析

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