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

类占用字节大小的计算

楼主xiaoxiangfei(蜗牛)2006-03-13 13:53:12 在 C/C++ / C++ 语言 提问

class   a{             \\占用了8个字节  
  public:  
  short   int   sia;  
  virtual   void   funa(){};  
  };  
  class   b:public   a\\占用了12个字节  
  {  
  public:  
  int   x;  
  virtual   void   funb(){};  
  };  
  class   c:public   a\\占用了8个字节  
  {  
  public:  
  virtual   void   func(){};  
  };  
  int   main()  
  {  
  cout<<"the   size   of   the   a   is   :"<<sizeof(a)<<endl;  
  cout<<"the   size   of   the   b   is   :"<<sizeof(b)<<endl;  
  cout<<"the   size   of   the   c   is   :"<<sizeof(c)<<endl;  
  int   abc;  
  cin>>abc;  
  return   1;  
  }  
  在这些类中这些占用字节是如何算的,为什么类a的虚函数占用了,而其子类的却没有占用?  
  如下的这个又是如何算的呢?  
  struct   a  
  {   int   a:4;  
      long   b:16;  
  } 问题点数:20、回复次数:9Top

1 楼ykzhujiang(朱朱)回复于 2006-03-13 14:12:10 得分 0

这里面涉及到许多相关知识,比如关于虚函数的VTable,VPtr以及字节对齐问题,还有占位符、内存布局等等,楼主可以搜索以下这些相关的基础知识,这样你才会对于一个类所占用的空间有一个清楚的认识Top

2 楼ydfivy(我就是一送外卖的)回复于 2006-03-13 14:52:46 得分 0

在派生类的虚函数表中,有基类的虚函数,还有派生类的虚函数.  
  这样在派生类中只要保留一个指向虚函数表的指针就可以了.Top

3 楼zh2817()回复于 2006-03-13 15:20:00 得分 0

不管是基类,还是派生类,楼主你是想要“类”的大小,你的程序(思路)行吗??Top

4 楼ytfrdfiw()回复于 2006-03-13 15:48:23 得分 0

建议楼主看一下inside   the   c++   object   model,lippman写的,侯杰译Top

5 楼cenlmmx(学海无涯苦作舟)回复于 2006-03-13 16:23:03 得分 10

class   a{   \\占用了8个字节  
  public:  
  short   int   sia;                       //4(因为要对齐)  
  virtual   void   funa(){};       //4  
  };  
   
  class   b:public   a\\占用了12个字节  
  {  
  public:  
  //short   int   sia(基类)             //4(因为要对齐)  
  int   x;                                           //4  
  virtual   void   funb(){};           //4  
  };  
   
  class   c:public   a\\占用了8个字节  
  {  
  public:  
  //short   int   sia(基类)             //4(因为要对齐)  
  virtual   void   func(){};           //4  
  };  
  有虚函数的类都有个指向vtable的指针,大小为4Top

6 楼pyrophile(豆子(天上云彩往下飘))回复于 2006-03-13 17:46:05 得分 0

class   a{   \\占用了8个字节  
  public:  
  short   int   sia;                       //8(因为要对齐)  
  virtual   void   funa(){};       //这个好像不站空间吧?  
  };Top

7 楼defyer007(深入浅出)回复于 2006-03-13 18:07:59 得分 10

class   a{             \\占用了8个字节  
  public:  
  short   int   sia;  
  virtual   void   funa(){};  
  };  
  class   b:public   a\\占用了12个字节  
  {  
  public:  
  int   x;  
  virtual   void   funb(){};  
  };  
  class   c:public   a\\占用了8个字节  
  {  
  public:  
  virtual   void   func(){};  
  };  
  有虚函数则占一个4Bytes,为指向虚函数表的一个指针,然后其他的成员按对齐方式占用Top

8 楼pyrophile(豆子(天上云彩往下飘))回复于 2006-03-14 10:20:40 得分 0

学习了Top

9 楼san_126(阿三)回复于 2006-03-14 11:25:14 得分 0

同意cenlmmx(学海无涯苦作舟)   ,但不同编译器默认的对齐字节数是不同的,VC6好像是8吧Top

相关问题

  • 有没办法准确计算字符串所占用的字节数?
  • BASE64编码的字节计算问题
  • 如何计算指令的字节数?
  • 类字节问题
  • 求CPU占用率的计算方法
  • 请教怎么计算字符串字节长度?
  • JS如何计算字符串的字节长度
  • 关于字节个数的计算问题.求简便方法
  • 请问指针变量占用几个字节的存储单元?
  • 在java中怎么知道一个对象占用内存的字节数?

关键词

  • virtual
  • 指针
  • 占用
  • 虚函数
  • 类
  • funa
  • funb
  • 大小
  • 派生类
  • 指向

得分解答快速导航

  • 帖主:xiaoxiangfei
  • cenlmmx
  • defyer007

相关链接

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

广告也精彩

反馈

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