结构体内存对齐
2023-12-20 15:49:29
偏移量的概念
创建结构体的第一个字节地址默认为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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!