一.结构体类型的声明
1.1结构体声明
结构体是一些值的集合,这些值称为成员变量。结构体的每个成员可以是不同的类型的变量。
1.2结构的自引用
在结构体中包含一个类型为该结构体本身的成员是否可以?
倘若结构体中包含了结构体变量,这样的结构体变量的大小就会无穷大,是不合理的。
正确的应该是
二.结构体的内存对齐
2.1结构体的对齐规则:
1.结构体的第一个成员对齐到和结构体变量起始位置偏移量为0的地址处。
2.其他成员变量要对齐到某个数字的整数倍的地址处。
对齐数=编译器默认的一个对齐数与该成员变量大小的较小值。(VS中默认的值为8,Linux中gcc没有默认对齐数,对齐数就是成员自身的大小)。
3.结构体总大小为最大对齐数(结构体中每个成员变量都有一个对齐数,所有对齐数中最大的)的整数倍。
4.如果嵌套了结构体的情况,嵌套的结构体成员对齐到自己成员中最大对齐整数倍处。
2.2修改默认对齐数
#pragma这个预处理指令,可以改变编译器的默认对齐数。
2.3结构体传参
上述print1和print2相比,print2函数好些。
函数传参的时候,参数需要压栈,会有时间和空间上的系统开销,而传递结构体对象的时候,结构体过大,参数压栈的系统开销大会导致性能下降。
得出传参的时候,要传结构体的地址。