标题: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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-365843-1-1.html




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

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