当前位置: 代码迷 >> 综合 >> 关于结构体占用的内存
  详细解决方案

关于结构体占用的内存

热度:65   发布时间:2023-10-24 10:17:45.0

内存对称规则:

  1.起始地址为该变量类型所占内存的整数倍,若不足则不足部分用数据填充至所占内存的整数倍

  2.该结构体所占总内存为结构体成员变量中最大数据类型的整数倍

struct rh_test{
            char *i;
            int APP;
            int  APPER;
            double cor;
            int number;
            bool is;
            char* pack;
            double send;
            char src;
} ;

详解:

这里面占用了56个字节,char *i 从0开始,但是int APP要4个字节(满足条件一),所以char*i占了4个字节;同理,int APPLE占用4个字节,但是double cor 的起始地址需要时8个整数倍,因此,前面的填充到16,所以一直到double cor,一共占用了24个字节,加上int number就是28个,再加1个bool is ,然后填充到32,再加上char*pack的四个字节,所以到了pack这里就一共占用了36个字节了,但是,需要符合double send 的8的倍数,因此需要补充到40,再加8,这里一共48个字节了,但是总共不是49个字节,因为要满足第二个条件(这里最大的是double,占8个字节)因此需要把49补充道56,因此总共占用了56个字节。

如果,结构体里面带数组,例如:

struct rh_test{
            char *i;
            int  APPER[5];
            double cor;
} ;

则数组占的字节为5,剩下的有空再写

 

 

  相关解决方案