c 语言 struct的内存对齐原则

如何计算得知struct内存大小,这就要从内存对齐原则说起:

内存对齐第一原则

结构体中元素是按照定义顺序一个个放到内存中去的,但并不是紧密排列的.每一个元素都认为内存是以它自己的大小来划分的,因此元素放置位置一定是元素内存宽度的整数倍上开始(从结构体首地址上向后找,找到第一个空闲的完整内存)

struct X {
 char a; //[0]
 int b;//[4,7]
double c;//[8,15]
} S1;

例如此例,a存入内存首地址第0个字节
存入b时,它先从结构体首地址查找,发现第一个4字节的空间被a占了一个,于是找下一个四字节空间,从第4个字节开始写入,到第7个字节结束.
存入c时,它先从结构体首地址以字节的大小查找,发现第一个8字节的空间被a、b占用,于是找一个8字节空间,于是从8字节写入到15字节结束

内存对齐第二原则

结构体占用内存大小,满足内存大小必须为占用最大内存元素的内存大小的整数倍

struct X {
char a; //[0]
double b; //[8,15]
int c;//[16,20]
}S2;

计算sizeof(S2)得24这是为什么呢,明明是只有20字节,这说明必须满足最大元素的整数倍,所以留了最后4个字节是空白

你可能感兴趣的:(c结构体)