一、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^)/~)