1.结构体存储对齐
结构体占用的空间为结构体成员中,占字节最大的数据成员的空间的整数倍
比如:
struct student{
char sex;
int score;
};
最大长度为整型占用4个字节的空间,所以其占用的空间为4的倍数,这样 s占用的空间就是 8个字节。
如果是这样一个结构体
struct student{
char sex;
double score;
};
占用的大小就是8的倍数,为16个字节;
2.数据成员的书写顺序也会影响结构体占用的空间的大小:
struct student{
char sex;
int score;
char subject;
};
占用的是4x3为12个字节,内存结构为先为sex分配一个字节的空间,然后执行对齐操作,下一个int型变量在下一个四字节的空间,然后,后面的subject为了对齐还占用4个字节的空间。
而
struct student{
char sex;
char subject;
int score;
};
占用的是2X4为8个字节的空间,因为前两个字符连续存放在了四字节的空间的前两个里面。为了执行对齐,空了两个字符的空间,下一个int型的变量存放在下一个四字节的空间中。
总结:
因为struct结构体的存储顺序会影响空间的使用率,所以以后应该尽量将相同数据类型的变量连续写。