结构体
1.概念
1.结构体:描述一个事物,问题的一系列数据的集合.
例:
struct person
{
char name[20];
int year;
int class;
int phone;
char addr;
};
2.作用
1.内置类型无法描述需要表述的事物,问题时就会定义结构体
2.返回的参数不只是一个而是一个集合时就会采用结构体
3.内存对齐问题
(以下问题都是在32位平台讨论)
- 产生内存对齐的问题的原因
1.不是所有的硬件平台都只支持访问任意地址上的任意数据
2.内存对齐可以提高工作效率,对于没有对齐的数据,内存访问的时候可能会处理两次而对齐的数据可以只访问一次
内存对齐就是典型的以空间换时间的做法 - 内存对齐规则
1.第一个成员与结构体变量的偏移量为0的地址处
2.剩余的变量要对齐到某个(对齐数)的整数倍的位置上
对齐数为编译器默认的一个对齐数与该成员大小的较小值。
VS中默认的值为8
linux中默认的值为4
3.结构体总大小为最大对齐数(第一个成员变量没有对齐数)的整数倍
4.如果结构体中有成员变量的类型是结构体被,镶嵌的结构体对齐到自己的最大对齐数的整数倍处,结构体总大小为最大对齐数的整数倍(遵循第3条原则:这里的最大对齐数包括被嵌套结构体的对齐数)
例:
struct student
{
char a;
double c;
int b;