类大小sizeof(class)

      class如同int等内建类型一样,分配有一定大小的内存,本文通过基本类、含有虚函数的类、单继承的派生类和多重继承的派生类来考察类的内存布局规律。

1、普通类对象的大小

 

      sizeof(struct C000)本应该是0,但有一个占位符;

      普通成员函数,静态成员函数,及静态成员变量皆不会在类的对象中有所表示。其中普通成员函数是在编译期通过this指针与类关联的,静态成员函数和静态成员变量相当于全局变量,只不过比其多一个类名称的限定。

2、普通派生类对象的大小

       可以理解为全盘继承下来,而不用管是否重名以及继承方式,两个父类有重名的成员,则在向上调用父类成员时就会产生向上二义性。

 

3、带虚函数类对象的大小

      带虚函数的类不同于普通类的是有一个虚函数表指针,也就是一个指针数组,而sizeof(*)为4.单继承派生类与基类共用一个虚函数表,但表的条目可能不一样,可能派生类虚函数表的条目多一些,或者是进行了改写。

 

4、带虚函数多重派生类对象大小

      含虚函数类多继承派生类拥有多个虚函数表,派生类可以重写各个基类的虚函数,从而修改了虚函数表,也可以添加虚函数,这个添加的虚函数指针条目将添加到第一个虚函数表中。

                                                                                                                                  created by braveyly

                                                                                                                                       2010-05-01 22:26:09

参考资料:C++对象布局及多态实现的探索(一)(二)(三)

 http://www.devxx.com/2009/06/138.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值