自建网站多少钱,慈溪企业网站,潘家园网站建设公司,网站免费空间购买5.1.3 struct内存对齐
结构体的对齐规则#xff1a;
(1)第一个成员在与结构体偏移量为0的地址处。
(2)其他成员变量要对齐到对齐数的整数倍的地址处
对齐数 编译器默认的对齐数与该成员大小的较小值。#xff08;vs中默认值为8#xff09;
(3)结构体总大小为最大对齐数…5.1.3 struct内存对齐
结构体的对齐规则
(1)第一个成员在与结构体偏移量为0的地址处。
(2)其他成员变量要对齐到对齐数的整数倍的地址处
对齐数 编译器默认的对齐数与该成员大小的较小值。vs中默认值为8
(3)结构体总大小为最大对齐数的整数倍。
(4)如果嵌套了结构体的情况嵌套的结构体对齐到自己的最大对齐数的整数倍处结构体的整体大小就是所有最大对齐数含嵌套结构体的对齐数的整数倍
示例代码
#includestdio.h
#includestddef.hstruct S1
{char c1;int i;char c2;
};int main()
{printf(该结构体成员 c1 开始的位置为第 %d 个字节\n, offsetof(struct S1, c1));printf(该结构体成员 i 开始的位置为第 %d 个字节\n, offsetof(struct S1, i));printf(该结构体成员 c2 开始的位置为第 %d 个字节\n, offsetof(struct S1, c2));printf(该结构体所占的内存空间为 %d 个字节\n, sizeof(struct S1));return 0;
}
/**输出
该结构体成员 c1 开始的位置为第 0 个字节
该结构体成员 i 开始的位置为第 4 个字节
该结构体成员 c2 开始的位置为第 8 个字节
该结构体所占的内存空间为 12 个字节*/分析表格
结构体变量成员变量自身所占大小编译器默认对齐数对齐数较小值C1181i484C2181
示例代码2
struct S3
{double d;char c;int i;
};struct S4
{char c1;struct S3 s3;double d;
};int main()
{printf(%d\n, sizeof(struct S4));return 0;
}S3的最大对齐数为 8它的大小为 16 个字节
首先毋庸置疑的是 char 先放到首位
接下来因为S3的对齐数为 8所以S3放在了以位置8开始的16个字节
最后是double对齐数为8所以放在了24的位置
最后该结构体的大小为 4*8 32 个字节