C语言结构体字节对齐规则
基本规则
规则1
:结构体(struct)的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存放在offset为该数据成员大小的整数倍的地方(比如int在32位机为4字节,则要从4的整数倍地址开始存储)。
规则2
:如果一个结构体B里嵌套另一个结构体A,则结构体A应从offset为A内部最大成员的整数倍的地方开始存储。(struct B里存有struct A,A里有char,int,double等成员,那A应该从8的整数倍开始存储。),结构体A中的成员的对齐规则仍满足原则1、原则2。
Tips:
- 结构体A所占的大小为该结构体成员内部最大元素的整数倍,不足补齐。
- 不是直接将结构体A的成员直接移动到结构体B中
规则3
:结构体的总大小,也就是sizeof的结果,必须是其内部最大成员的整数倍,不足的要补齐。
案例解析
例1
typedef struct A{
int a;
short b;
}A;
printf("%d\n",sizeof(A));
例2
typedef struct B{
double a;
short b;
int c;
}B;
printf("%d\n",sizeof(B));
例3
typedef struct C{
short a;
double b;
int c;
}C;
printf("%d\n",sizeof(C));
例4
typedef struct D{
int a;
double b;
}D;
typedef struct E{
short a;
int b;
D c;
}E;
printf("%d\n",sizeof(E));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)