struct、union、字节对其、大端小端存储总结

本文详细介绍了C语言中struct和union的使用,包括struct的结构体对齐方式和union的数据共享特性。同时,文章探讨了字节对齐的规则,如数据成员对齐和结构体作为成员的对齐,并提到了结构体总大小的对齐要求。最后,文章简述了大端小端存储的概念,通过生动的比喻帮助读者理解这两种不同的存储方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、struct&union

1. struct

在C中struct结构体将某些基础类型包含在一起,用来描述某种个复杂的数据类型,例如链表节点、树节点,或者用来表示某个对象的数据特征,例如学生记录(包含学号、姓名、年级、专业等信息)。

struct结构体的对齐方式及所占存储空间大小主要取决其包含的各成员的大小(下面有具体原则)。

2. union

在一个union中可以包含多种不同类型的数据类型,一个union类型对象可以接收union中包含的任一种数据类型的数据,这些数据类型共享同一段内存。因此union对象所占的存储空间大小取决于其中包含的占用空间最大的类型,但是这个最大值还必须是其他类型大小的公倍数。

二、字节对其规则:(摘自http://blog.youkuaiyun.com/hairetz/article/details/4084088)

1. 数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节,则要从4的整数倍地址开始存储。 

2. 结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储.(struct a里存有struct b,b里有char,int ,double等元素,那b应该从8的整数倍开始存储.) 

3. 收尾工作:结构体的总大小,也就是sizeof的结果,.必须是其内部最大成员的整数倍.不足的要补齐.

三个重要的对齐值:(摘自http://blog.youkuaiyun.com/fyh2003/article/details/6568928)

1. 自身对齐值

数据类型的自身的对齐值。例如char型的数据,其自身对齐值为1字节;short型的数据,其自身对齐值为2字节;int,float,long类型,其自身对齐值为4字节;double类型,其自身对齐值为4字节;而struct和class类型的数据其自身对齐值为其成员变量中自身对齐值最大的那个值。 

2. 指定对齐值

#pragma pack (value)时指定的对齐值value。
3. 有效对齐值

上述两个对齐值中最小的那个。

按照有效对齐值进行对齐操作。

三、大端小端存储

小端存储:高位存储在高地址,低位存储在低地址。

大端存储:高位存储在低地址,低位存储在高地址。

(总是记不住会忘-_-,想了个办法,小端就是小孩,小孩比较单纯,想什么就说什么,所以说的做的都是一致的,大人社会阅历丰富,为了各种原理总会违心的说些话做些事,所以说的做的是不一致的。这样类比就记住喽~\(^o^)/~)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值