CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

请教:对sizeof的疑问

楼主h2plus0(~~~)2002-03-06 11:48:35 在 C/C++ / C语言 提问

我现在有一个结构,为什么sizeof()计算出来的和我想的不一样呢?  
   
  struct   h2_t  
  {  
        char                       a[6];             //   6  
        char                       b[16];           //   16  
        unsigned   char     c;                   //   1  
        unsigned   int       d;                   //   4  
  };  
   
  在我的机器上,win2000,   vc6,   h2_t打印出的的大小是   28  
  而我想应该是   6+16+1+4   =   27,  
   
  奇怪, 大家说为什么呀?  
   
  谢谢!  
   
   
  问题点数:100、回复次数:7Top

1 楼ciml(镜子)回复于 2002-03-06 11:53:48 得分 45

28是因为机器字节对齐的原因,主要是为了提高数据传输速度  
  如果大小不是4的整数倍,会自动补齐为4的整数倍  
  你上面是27,那么自动补齐一字节为28正好是4的7倍  
  如果是26,25,同样sizeof出来是28,都要补齐为4的整数倍Top

2 楼G_zcm(黑骑士)回复于 2002-03-06 11:56:27 得分 0

Study!Top

3 楼sticker(了了)回复于 2002-03-06 12:01:58 得分 5

同意ciml说的。所以编程时都不要画蛇添足自己数位数,用sizeof是最好的。Top

4 楼h2plus0(~~~)回复于 2002-03-06 12:04:09 得分 0

天啊,   象这样的话,   那sizeof根本就没用拉,    
   
  如果考自己计算的话,   但是有时如果改动了一下定义的结构,   那样程序又会有许多地方要更改,   我该这么样才能比较好的处理这种问题呢?  
   
  谢谢   ciml(镜子)   先!  
  Top

5 楼leojay(leojay)回复于 2002-03-06 12:07:28 得分 5

那就不要自己计算了呀Top

6 楼lightning(lightning)回复于 2002-03-06 12:15:21 得分 45

没有关系,   还是可以自己算的,只要在多平台编程时注意到就可以了.  
  你也可以选择你需要的对齐子节数e.g,#pragma   pack(1).  
  sizeof涉及struct的内存结构是编译器相关的.Top

7 楼h2plus0(~~~)回复于 2002-03-06 12:45:09 得分 0

我明白了   ,   谢谢大家了!  
  Top

相关问题

  • bcb中sizeof()的疑问
  • 关于sizeof()的疑问?
  • 关于sizeof()函数的疑问?
  • 关于SizeOf的疑问,请教大家
  • 对MALLOC的疑问!
  • 对LPCTSTR的疑问
  • 我对COM有疑问
  • 对COUT和++,--的疑问!
  • 对于.目录的疑问
  • 对MVC的一些疑问

关键词

  • 结构
  • 整数倍
  • sizeof
  • 补齐
  • char

得分解答快速导航

  • 帖主:h2plus0
  • ciml
  • sticker
  • leojay
  • lightning

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo