QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2976|回复: 3

gcc中struct成员是如何对齐的

[复制链接]
发表于 2008-8-23 02:00:53 | 显示全部楼层 |阅读模式
最懒的版主写点心得吧,IA32系统上。

  1. struct test_str{
  2.   int a;
  3.   double b;
  4. };
复制代码


offsetof(test_str, b) = ?

gcc有个-fpack-struct参数,会压缩成员间加入的对齐空间,在加了这个参数后,答案一定是4,但是如果
不加呢?答案是多少?
我在写一个c语言的分析工具,结果发现,答案是8!
上网查了一下,发现这个问题困惑了很多人。经过各种测试,我得出结论,gcc貌似是按照成员所属基本型
的字长来对齐的,如果成员b的字长是6(当然不存在),那么offsetof(test_str, b) 就必然能整除6。记住,
这里说的是char short int那样的基本型。

最后祝大家周末愉快,别像我一样加班。
发表于 2008-8-28 10:35:40 | 显示全部楼层
难得看到这样的东西,有点意思
回复

使用道具 举报

发表于 2008-12-17 14:33:56 | 显示全部楼层
编辑掉,这个说法容易导致歧义,懒得举一堆例子打一堆字了。你参考书吧。如果你比较难找我再打字。

[ 本帖最后由 HalfWorm 于 2008-12-17 15:00 编辑 ]
回复

使用道具 举报

发表于 2008-12-17 14:39:47 | 显示全部楼层
一般编译器都是这样实现,更详细的可以参考CPP对象模型。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-4-18 15:14 , Processed in 0.073902 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表