频道栏目
首页 > 程序开发 > 软件开发 > 其他 > 正文
结构体的内存对齐问题
2016-11-22 08:16:00         来源:qq_34992845的博客  
收藏   我要投稿

结构体的内存对齐原则:
1.第一个成员在与结构体变量偏移量为0的地址处——也就是第一个变量没有对齐数

2.其他成员变量要对齐到它的(对齐数)的整数倍的地址处

//对齐数 = 编译器默认的一个对齐数与该成员大小的较小值。
// vs—-默认为8;
// linux—默认为4

3.结构体总大小为最大对齐数(每个成员变量除了第一个成员都有一个对齐数)的整数倍。

4.如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是
最大对齐数(含嵌套结构体的对齐数)的整数倍。
下面通过例子来分析:(在linux下默认的对齐数是4)

注意:括号内是变量名,地址在累加,而每次前面的地址必须是后面变量对齐数的整数倍。

所以结构体p的大小为 4(e)+4(x)+1(y)+3(补得空间,因为ss结构体的最大对齐数为4) = 12(4的倍数)
12+3*20(3个结构体的大小) = 72
72(是3的倍数)+3 = 75
75(不是4的倍数,所以加1) +1 = 76(是4的倍数)
76+4(指针变量p的大小) = 80(是结构体p的最大对齐数 4的倍数)
所以结构体p的大小为80

点击复制链接 与好友分享!回本站首页
上一篇:HashMap多线程并发问题分析
下一篇:VC关闭窗口退出
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站