免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: geekjack
打印 上一主题 下一主题

老问题 -- 结构体对齐问题,混了…… [复制链接]

论坛徽章:
0
11 [报告]
发表于 2011-06-27 16:41 |只看该作者
回复 1# geekjack


强制结构对齐造成的

论坛徽章:
0
12 [报告]
发表于 2011-06-28 01:26 |只看该作者
本帖最后由 geekjack 于 2011-06-28 10:49 编辑

回复 9# yulihua49

现在比较清楚了
我在dev-c++中 添加编译指令 #pragma pack(4),使用4字节对齐

这样sizeof(s2)就等于 3+(1)+  8  +1+(3)= 16  //括号中为补充的字节数

PS:在gcc中  double应该也是8位吧   呵呵  
     您的回复中意思应该是 “gcc在32位系统,double占用8位,对齐规则是4” 吧    呵呵

谢谢大家

其实现在这个问题总结起来,根源是下面两个问题,但是我还不是特别清楚其机制
  1. struct s3{
  2.        char c[3];
  3.        double a;
  4.        char cc;
  5. };
复制代码
  1. typedef struct{
  2.        char c[3];
  3.        long double ld;
  4.        char cc;
  5. }s4;
复制代码
1、如果说sizeof(s3)结果等于24,那么sizeof(s4)的结果就不应该为20啊。这个是至今还不清楚的问题之一。(使用系统默认对齐方式)
2、如果强制系统用4位对齐,那么得到的结果是符合预期的
    -->sizeof(s3)为16.  
    -->sizeof(s4)为20.   //这时是可以理解的。3+(1)+  12  +1+(3)=20


可能实际应用当中应该正如您所说  “对各种基本类型进行测试再计算结构成员偏移量和结构整体尺寸”。谢谢哈!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP