结构体内存对齐

偏移量的概念

创建结构体的第一个字节地址默认为0,第二个字节为1,以此类推。

结构体的内存对齐(在x86与x64环境下,变量所占字节数可能不同,故结构体的大小也可能不同)

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.当结构体中嵌套了其他结构体时,嵌套的结构体成员对齐到自己的成员中最大对齐数的整数倍处结构体的整体大小就是所有最大对齐数(含嵌套结构体中成员的对齐数)的整数倍。

结构体内存对齐_第1张图片

结构体内存对齐_第2张图片

结构体成员位置的验证

结构体内存对齐_第3张图片

结构体内存对齐_第4张图片

结构体内存对齐的原因

结构体内存对齐_第5张图片

合理创建结构体

那在设计结构体的时候,我们既要满⾜对⻬,⼜要节省空间,如何做到: 让占⽤空间小的成员尽量集中在⼀起。 

你可能感兴趣的:(数据结构)