| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1378 人关注过本帖
标题:GCC编译器是如何计算结构体的大小的啊
取消只看楼主 加入收藏
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
结帖率:94.44%
收藏
已结贴  问题点数:20 回复次数:2 
GCC编译器是如何计算结构体的大小的啊
struct b{
      char c;
      int a;
      short b;
      double d;
 };

GCC的计算大小是20 ;
VC的计算大小是24


GCC编译器是如何计算结构体大小的啊?
是不是最后末尾的填充大小不计算的啊;


结构体默认的字节对齐一般满足三个准则:
(1)结构体变量的首地址能够被其最宽基本类型成员的大小所整除。
(2) 结构体每个成员相对于结构体首地址的偏移量(offset) 都是成员自身大小的整数倍,
        如有需要,编译器会在成员之间加上填充字节(Internal Adding)。
(3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,
    如有需要, 编译器会在最末一个成员之后加上填充字节(Trailing Padding)。

上面第三条对GCC是不是不管用啊????
搜索更多相关主题的帖子: 如何 结构体 编译器 填充 计算 
2012-04-15 15:31
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:0 
回复 2楼 beyondyf
《编写高质量代码:改善C++程序的150个建议》说是从小到大
原理应该是一样的,就是尽量使其对齐,尽量少填充字符, 纯个人理解,如果错望指正

看来那书被我发现BUG了,GCC下应该他最后面的填充大小不算的,
看来他书写的不全面啊,哈哈^_^

GCC下运行的结果:
图片附件: 游客没有浏览图片的权限,请 登录注册
2012-04-15 21:11
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:0 
回复 4楼 beyondyf
似乎两者的结果都一样 指哪两者啊
2012-04-15 22:24
快速回复:GCC编译器是如何计算结构体的大小的啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018891 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved