结构体内存对齐

发布时间:2023年12月20日

偏移量的概念

创建结构体的第一个字节地址默认为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.当结构体中嵌套了其他结构体时,嵌套的结构体成员对齐到自己的成员中最大对齐数的整数倍处结构体的整体大小就是所有最大对齐数(含嵌套结构体中成员的对齐数)的整数倍。

结构体成员位置的验证

结构体内存对齐的原因

合理创建结构体

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

文章来源:https://blog.csdn.net/qq_52907930/article/details/135105699
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。