内存对称规则:
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,剩下的有空再写