结构体易忘点
结构体初始化
当我们去初始化一个结构体的时候,我们常常会按变量顺序初始化,但其实也可以不按顺序,同时也可以部分数据初始化。
结构体对齐
结构体里面的成员有一定的对齐规则,他不是每一个空间都存着有效数据的,有些空间是被浪费的,并且不能被访问。
原因:
1.我们不是所有的硬件都能访问到任意位置的数据的。
2.提高效率,对齐后的数据只需要访问一次,未对齐的数据要访问两次(32bit位的电脑一次只能访问4个字节,有些数据就会被两次分开访问)。
这是一直空间换时间的做法。
对齐规则如下
(1)第一个结构体成员放在偏移量为0处。
(2)从第二个成员开始,以后每个成员要对齐到成员对齐数的整数倍偏移位处。
成员对齐数:成员自身大小与默认对齐数的较小值,vs默认对齐数8,gcc无默认对齐数。
(3)对齐后的整体所占字节数要为所有成员中对齐数最大的整数倍。
(4)当存在嵌套结构体的情况,在放置结构体时,结构体的对齐数是所有成员变量(包含嵌套结构体的成员变量)的所占字节数最大值的整数倍。
具体的栗子如下: