原则1、数据成员对齐规则:结构(struct或联合union)的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始 (比如int在32位机为4字节,则要从4的整数倍地址开始存储)。 原则2、结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储。 (struct a里存有struct b,b里有char,int,double等元素,那b应该从8的整数倍开始存储。) 原则3、收尾工作:结构体的总大小,也就是sizeof的结果,必须是其内部最大成员的整数倍,不足的要补齐。 这三个原则具体怎样理解呢?我们看下面几个例子,通过实例来加深理解。 例1:struct { short a1; short a2; short a3; }A; struct{ long a1; short a2; }B; sizeof(A) = 6; 这个很好理解,三个short都为2。 sizeof(B) = 8; 这个比是不是比预想的大2个字节?long为4,short为2,整个为8,因为原则3。 例2:struct A{ int a; char b;
结构体内数据变量内存分配详解
最新推荐文章于 2024-07-19 00:38:55 发布
本文详细阐述了结构体中数据成员的内存对齐规则,包括数据成员对齐、结构体作为成员的对齐以及结构体总大小的对齐原则,并通过实例解释了这些原则如何影响结构体的内存布局和sizeof的结果。通过对不同结构体实例的分析,加深了对内存对齐的理解。
摘要由CSDN通过智能技术生成