C++类及其实例所占据空间(自己测试结果)

原创 2007年10月08日 14:28:00

#include<stdio.h>


 
class CMember1 {
     
public:
         CMember1()
{a=0x5678;printf("构造 CMember1 ");}
         
~CMember1(){printf("析构 CMember1 ");}
         
int a;
     }
;
 
class CParent1 {
    
public:
        CParent1()
{parent_data=0x1234;printf("构造 CParent1 ");}
        
virtual ~CParent1(){printf("析构 CParent1 ");}
        
virtual void test(){printf("调用CParent1::test() ");}
        
void real(){printf("调用CParent1::test() ");}
        
int parent_data;
    }
;




class CChild1 : public CParent1 {
    
public:
        CChild1()
{printf("构造 CChild1 ");}
         
~CChild1(){printf("析构 CChild1 ");}
         
void test(){printf("调用CChild1::test() ");}
        
void real(){printf("调用CChild1::test() ");}
        CMember1 member;
        
static int b;
    }
;
    




int main()
{
    
int aa = sizeof(CChild1);
    printf(
"CChild1------%d ",sizeof(aa));           
    
int bb = sizeof(CParent1);                        
    printf(
"CParent1------%d ",sizeof(bb));          
    
int cc = sizeof(CMember1);
    printf(
"CMember1------%d ",sizeof(cc));           

     CMember1 member1;
     CParent1 CParent0;
     CChild1 CChild;
    printf(
"member1------%d ",sizeof(member1));
    printf(
"CParent0------%d ",sizeof(CParent0));
    printf(
"CChild1 cc------%d ",sizeof(CChild));
    

    
return 0;
}



 输出结果如上面::

结构体声明(定义)的时候不分配内存空间,但是类声明(定义的时候),其中的数据成员变量分配空间(包括静态成员变量和非静态成员变量),但函数不分配空间。4 Menber ;4 Cparent1 ; 4 Cchild1;

类实例化的时候,静态成员变量不占据空间,(共享类定义时候的空间,节省内存资源),实例类的内存使其父类和成员类数据成员的空间及其虚函数所占的空间(虚函数占据四个字节,为其虚函数表指针数组所占用),
12=4(menber)+8(parent1), 8=4(parent_data)+4(vptr)

若去掉子类中 static 声明,即Cchild1中为:  int  b; 结果如下图

16= 4 +8 +4     member+parent_data + parent  virtual + int b

若去掉父类中的 virtual 函数生命变为非虚函数,则子类实例中的数字不变化,即 Cchild cc = 12. 12=4+4+4            menber+ parent_data + cc virtual

若将子类和父类中的虚函数全部都变为普通成员函数,则输出结果为                                                                         Cchild cc = 8.      8=4+4( member+parent_data)

由此可知,虚函数在类中占据四个字节,且子类共享父类的虚函数空间。(即若父类中有虚函数,子类不再为虚函数分配空间,但若父类无虚函数而子类有,则在子类中为虚函数分配空间)

-------------- 呵呵,很笨的方法,不晓得是否正确,如果有问题,还请指教 -------------------------

关于计算struct结构体占用空间

关于如何计算struct所占用空间的大小: 有人可能觉得不就是把结构体内所有变量所占空间加起来不就可以了吗?其实,这句话只对了一半,所有变量所占空间要加起来没错,但是机器为了更加容易的取出struc...
  • p011235
  • p011235
  • 2015年09月26日 12:22
  • 2158

C语言中结构体变量到底占多大空间

结构体是C语言中
  • Jung_zhang
  • Jung_zhang
  • 2015年06月10日 17:48
  • 3743

C++类对象成员变量和成员函数内存分配的问题

(转载自:http://blog.sina.com.cn/s/blog_4feac7b90101keet.html) 很多人都知道C++类是由结构体发展得来的,所以他们的成员变量(C语言的结构体只有...
  • njustzj001
  • njustzj001
  • 2015年01月12日 20:26
  • 2805

loadrunner性能测试结果实例分析

整理电脑时,发现之前参见过的loadrunner培训PPT,随手打开看了下,发现其中的 关于两个测试结果分析的实例不错,综合学习了下,根据个人理解就行了整理。 实例一 测试场景:针...
  • superxgl
  • superxgl
  • 2017年04月03日 16:33
  • 211

[转]依赖注入(IOC)的详细讲解,附带实例和测试结果(大师兄亲测)

原文链接:http://blog.csdn.net/qq_27093465/article/details/52547290 版权声明:觉得此文有用的,不嫌麻烦的,就留个言呐,或者点个赞...
  • hephil
  • hephil
  • 2017年12月05日 19:46
  • 29

c++重写卷积网络的前向计算过程,完美复现theano的测试结果

本人的需求是: 通过theano的cnn训练神经网络,将最终稳定的网络权值保存下来。c++实现cnn的前向计算过程,读取theano的权值,复现theano的测试结果 本人最终的成果是: 1、卷积神经...
  • u014365862
  • u014365862
  • 2015年08月26日 21:41
  • 1140

c++重写卷积网络的前向计算过程,复现theano的测试结果

转自http://blog.csdn.net/qiaofangjie/article/details/18042407 本人的需求是: 通过theano的cnn训练神经网络,将最终稳定...
  • kaka20080622
  • kaka20080622
  • 2014年02月19日 00:07
  • 1216

Java POI 导出 Excel 到本地详细实例(附jar包,测试代码,测试结果图)

poi导出Excel测试实例,附jar包,测试Java代码,详细注释,测试结果图。 下面是poi的jar包的某度云盘。 链接:http://pan.baidu.com/s/1kVBEZNh 密码:74...
  • qq_27093465
  • qq_27093465
  • 2016年11月21日 17:55
  • 1185

Jenkins+Ant+Android+Robitium 实例详解(打包app,执行Robotium测试,生成测试结果)

Jenkins Ant 打包android app,构建Robotium测试,执行Robotium测试,生成测试结果 实例详解 说明: android project 名称: cheersApp an...
  • achang21
  • achang21
  • 2015年04月23日 19:49
  • 4634

深入理解loadrunner的测试结果

  • 2008年05月06日 13:00
  • 107KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++类及其实例所占据空间(自己测试结果)
举报原因:
原因补充:

(最多只允许输入30个字)