c语言结构体命名规则,C语言 结构体(联合体)对齐规则

本文详细解析了C语言中结构体和联合体的内存对齐规则,包括结构体成员的存储位置、对齐数的确定、结构体总大小的计算等,通过多个实例分析了不同结构体成员排列对总大小的影响。
摘要由CSDN通过智能技术生成

/*结构体(联合体)对齐规则*/#include#include#include

/** 原则1、第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储)。

* 原则2、结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最宽基本类型大小的整数倍地址开始存储。

*原则3、结构体的总大小为结构体最宽基本类型成员(成员可以是基本类型,也可以是结构体)大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节

*最宽基本类型的概念,所谓基本类型是指像char、short、int、float、double这样的内置数据类型。*/

structData1

{intc;chara;charb;

};/*struct Data1分析

分析对齐数

对齐数的值是 结构体中最宽基本类型成员

struct Data1最宽类型是int,占4个字节大小,所以对齐数的值是4

根据原则1(第一个数据成员放在offset为0的地方),成员属性c从offset为0的位置开始,成员属性c大小是4个字节,成员属性c从offset为0的位置开始存储,占据4个字节大小

成员属性a从offset为4的位置开始,根据原则1(以后每个数据成员存储的起始位置要从该成员大小的整数倍开始) ,现在offset是4,是1的整数倍

所以成员属性a从offset为4的位置开始存储,占据1个字节大小

成员属性b从offset为5的位置开始,根据原则1(以后每个数据成员存储的起始位置要从该成员大小的整数倍开始) ,现在offset是5ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值