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

关于结构体的大小

楼主zsqat(强子)2005-01-03 09:17:00 在 C++ Builder / VCL组件使用和开发 提问

在C++Builder下  
  struct   test2{  
      int     a;  
      char   b;  
  };  
  sizeof(test2)为8  
  我想sizeof(test2)应该是5(int   是4,char   1)为什么它是的结果是8;  
  是不是c++和c计算结构的大小不一样的 问题点数:0、回复次数:16Top

1 楼sankt(宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒.)回复于 2005-01-03 09:36:15 得分 0

应该是编译器的问题吧Top

2 楼xpdavis(咕嘟-不想孤独)回复于 2005-01-03 09:40:17 得分 0

编译器做了对齐操作。Top

3 楼constantine(飘遥的安吉儿)回复于 2005-01-03 10:04:04 得分 0

bcb里面设置为Byte对齐就是5了  
  默认好像是Quad   wordTop

4 楼h13bk(道人)回复于 2005-01-03 10:34:30 得分 0

project-options-advanced   compiler-data   alignment   设为byteTop

5 楼zsqat(强子)回复于 2005-01-03 10:58:48 得分 0

怎么设置Byte对齐,和Quad   word对齐,我做的时候,什么都没动,按默认的,我看c语言上说的应该是各成员大小之和,为什么他好像是按最大的成员大小相加的  
  Top

6 楼zsqat(强子)回复于 2005-01-03 11:04:14 得分 0

#pragma   pack(1)  
  struct   test  
  {  
  int   a;  
  char   b;  
  };  
  Edit1->Text=sizeof(test);  
  #pragma   pack()  
  这样设置的话就对了是5,#pragma   pack(1)是啥意思?1是啥意思?Top

7 楼libbyliugang()回复于 2005-01-03 11:55:39 得分 0

sizeof(int)>=sizeof(char)  
  这里sizeof(int)==sizeof(char)  
  这是我的想法  
  Top

8 楼jishiping(JSP 季世平)回复于 2005-01-03 12:21:48 得分 0

#pragma   pack(N)  
  这儿的N可以是1,2,4,8,N为1表示数据按BYTE对齐,就是说,变量在内存中的地址,可以是任何值。N表示,如果变量的占用的字节大小>=N时,它在内存中的地址,必须是N的整数倍。比如楼主这儿的结构,缺省情况下为DWORD对齐(N为4),第一个变量为int,它占用4个字节,所以a的地址必须为4的倍数,第二个变量为char,可以在任意位置,这样得到的结构大小为5,同时整个结构的大小,必须和结构的第一个变量的要求相同。这儿的第一个变量为int,按DWORD对齐地址是4的倍数,所以整个结构的大小也必须是4的倍数。Top

9 楼zsqat(强子)回复于 2005-01-03 15:11:31 得分 0

上面的1,2,4,8分别表示啥意思?Top

10 楼mygis2003(影子)回复于 2005-01-03 15:21:06 得分 0

1,2,4,8是对齐方式Top

11 楼zsqat(强子)回复于 2005-01-03 16:12:40 得分 0

1是按字节对齐,2,4,8各式按啥方式对齐的Top

12 楼tsk()回复于 2005-01-03 22:25:09 得分 0

用下面方法做就可以了!  
   
  #pragma   pack(push,1)  
   
  struct   test2{  
      int     a;  
      char   b;  
  };  
   
  #pragma   pack(pop)  
  Top

13 楼jishiping(JSP 季世平)回复于 2005-01-04 13:04:15 得分 0

2   就是WORD对齐,4就是DWORD对齐,8就是QWORD对齐。还是以缺省的DWORD对齐来说明,在Win32下,int、long、float、double变量的地址必须为4的整数倍,WORD变量的地址必须是2的整数倍,char、BYTE可以在任何地址上。Top

14 楼zsqat(强子)回复于 2005-01-04 13:22:58 得分 0

我们定义变量时,是不是Byte相当于char,word相当short   int,dword相当于int,qword相当于long?Top

15 楼jishiping(JSP 季世平)回复于 2005-01-04 22:27:11 得分 0

BYTE   就是   unsigned   char   (和char相比,只是有没有符号而已)  
  WORD   就是   unsigned   short   int   (和short   int相比,只是有没有符号而已)  
  DWORD   就是   unsigned   long   int   (win32中long的长度为4,64位下long的长度为8)  
  QDWORD   为8个字节,C、C++中只有double、long   double、long   long   int、__int64   几个类型   >=   8Top

16 楼zsqat(强子)回复于 2005-01-05 08:19:31 得分 0

在此,太感谢季世平对我的帮助,支持!Top

相关问题

  • 结构体大小问题?
  • 关于结构体的大小
  • 看看这个结构体的大小
  • 结构体大小的问题
  • 一个结构体大小的问题!(在线等待结贴)
  • 问一个关于结构体大小的菜鸟问题
  • 结构体变量占用内存大小?
  • 怎样得到结构体的实际大小值??
  • 如何求嵌套结构体的大小?
  • VB6中如何计算结构体的大小

关键词

  • c++
  • win32
  • 结构
  • word
  • 变量
  • 大小
  • 地址
  • 倍数
  • pragma pack
  • 相当于

得分解答快速导航

  • 帖主:zsqat

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

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