CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

关于类大小的,一些问题,纳闷~

楼主ring821(烟圈)2006-03-04 10:57:39 在 C/C++ / C++ 语言 提问

怎么会是48呢?请高手解释下原因,谢谢  
  #include   <iostream>  
  using   namespace   std;  
   
  struct   A  
  {  
  char   c1;  
  double   dl;  
  char   c2;  
  };  
   
  class   base  
  {  
  public:  
  char   c3;  
  char   c4;  
  struct   A   a;  
  int   i;  
  const   int   ci;  
  base():ci(10){}  
  virtual   ~base()   =   0   {};  
   
  };  
  class   Derived:public   base  
  {  
   
  };  
  void   main()  
  {  
  int   i   =   sizeof(Derived);  
  cout<<   i   <<endl;  
  return;  
  } 问题点数:50、回复次数:10Top

1 楼tjsjping(ping)回复于 2006-03-04 11:25:28 得分 13

struct   A的大小为24,c1占用1字节,填充7字节,d1、c2类似  
  c3、c4占用2字节,填充6字节  
  2+6+24+8+4+4   =   48字节  
  最后两个4一个是vptr的大小,另外一个是填充的值  
  Top

2 楼willingbupt(buptcsdn)回复于 2006-03-04 11:59:54 得分 12

在struct中因为double是分配8个字节,所以其它的char分配也是8字节,其余的每个变量都按照变量中分配空间最大的进行填充。Top

3 楼ytfrdfiw()回复于 2006-03-04 13:13:19 得分 15

二楼正解,vptr是指向虚拟函数列表的指针,占4bytes.在以上当中,class   base是以8字节对齐的,切勿以为是24字节对齐。它是以struct   A中最大字节为对齐标准的,本例中为double。所有的对齐方式是不会以用户定义的类型大小为标准的,只会以机器内部的类型为标准,e.g.:int,double,char   etc.Top

4 楼houdy(致力于图像/图形领域,成为有思想的程序员)回复于 2006-03-04 14:28:45 得分 0

对象在内存中的分配受到多方面的影响,其中包括:操作系统,编译器,编译器选项。简单的说就是平台有关的。Top

5 楼Arhero(BigBoy)回复于 2006-03-04 19:15:16 得分 5

支持houdyTop

6 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2006-03-04 19:56:06 得分 0

字节对齐等Top

7 楼yxg80(林夕昱)回复于 2006-03-04 20:00:20 得分 0

学习!Top

8 楼snailbreak(悄悄的来,正如我悄悄的走)回复于 2006-03-04 20:14:32 得分 0

对Top

9 楼ox_thedarkness()回复于 2006-03-04 20:18:08 得分 5

-       -   实测了一下,VC7   结果48,   dev   C++   结果40,自己算的也是40。我搞不清:  
   
   
  vptr   4  
  //   VC为什么要在这里添一个4字节?   按对齐的目的来说,这个没有必要阿  
  //   如果vptr   换成一个其他的4字节物体,比如int   或者   void*   也不会加这四个字节  
  //   为什么VC中,   vptr   后面要刻意补齐?  
  char   c3     1  
  char   c4     1  
   
  //====================================  
   
  结果VC是这样的:  
  vptr   4  
  +4    
  char   c3     1  
  char   c4     1  
  +6  
  struct   A   24  
  ...  
   
  //====================================  
  而DevC++   是这样的:  
  vptr   4  
  char   c3   1  
  char   c4   1  
  +2  
  struct   A   24  
  ...  
  Top

10 楼mars841215(龙行天下)回复于 2006-03-05 22:10:17 得分 0

就是边界对齐的问题   。。。。  
   
  看看Thinking   in     c++   就明白了Top

相关问题

  • 纳闷
  • 纳闷!!:(
  • MFC新建类是出现一个纳闷的问题,请教!!!
  • 关于类类型大小问题
  • Java的类是否区分大小写?
  • AnsiString类型怎样比较大小?
  • 类指针大小的问题
  • 一道笔试题: 类大小疑问
  • 数字类型比较大小
  • 数据类型大小的问题?

关键词

  • ci
  • derived
  • char c
  • struct
  • int i

得分解答快速导航

  • 帖主:ring821
  • tjsjping
  • willingbupt
  • ytfrdfiw
  • Arhero
  • ox_thedarkness

相关链接

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

广告也精彩

反馈

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