接下来我们就从这个规则的简单结构来分析理解一下。
按照规则填充得到结构体struct1所需的内存18。但是,内存分配必须是最大成员8的整数倍,即必须是24。
图1所示的执行结果与根据规则计算的结果相同。
根据上述规则,输出内存中存储的数据将如图2所示的结果。
接下来读取内存区域中的数据,检查是否是图3中保存的数据。
我们将使用上述已知信息。使用结构体struct1作为研究对象。为了验证上述规则,定义另一个结构体struct2作为struct1的成员。
按照约定,struct2的最大内部成员是1字节的整数倍。将数据添加到存储中。struct1所需的内存不需要更改。
结果图2.1
从结果图中可以看出,struct2的成员是在struct1的成员d之后填充并存储的。
结果图2.2
struct1所需内存为28。8字节的最大整数倍必须是32。
结构体struct2被填充到29并终止,但该结构体必须满足内存对齐原则。因此,short从32开始填充,因为它的扩展(30,31)总共占用12个字节,这是最大成员的整数倍。内存为40字节。
您可以看到结构构件的顺序已调整,以利用中间备件。这节省了结构所需的内存。
上一篇:内存对齐是什么意思
下一篇:struct内存对齐原则