创建结构体的第一个字节地址默认为0,第二个字节为1,以此类推。
1.第一个元素应放在偏移量为0的位置。
2.其他元素要放在偏移量为某个数字(对齐数)的整数倍上。
这个数字是默认对齐数与该元素所占字节数的较小值。每个元素都对应一个对齐数。
在VS环境下,默认对齐数是8。在linux的gcc中没有默认对齐数的概念,每个元素所占字节数就是对应的对齐数。
举例说明(VS环境下):
int??? 4??? 8 ---> 4?? int型变量(非结构体第一个元素),就要放在偏移量为4、8、12.....的空间上。
char? 1?? 8 --->1? char型变量(非结构体第一个元素),就要放在1、2、3.....的空间上。
3.结构体的大小应为最大对齐数的整数倍。
4.当结构体中嵌套了其他结构体时,嵌套的结构体成员对齐到自己的成员中最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体中成员的对齐数)的整数倍。
那在设计结构体的时候,我们既要满?对?,?要节省空间,如何做到: 让占?空间小的成员尽量集中在?起。?