类大小总结

原创 2016年05月31日 14:13:29
namespace test_class_size
    {
    class A
    {  
public:  
protected:  
private:  
};  
class B{  
public:  
protected:  
private:  
};  
class C:public A,public B{  
public:  
protected:  
private:  
};  
class D:virtual public A  
{  
public:  
protected:  
private:  
};  

class E:virtual public A,virtual public B{  
public:  
protected:  
private:  
};  
class F{  
public:  
   int a;  
   static int b;  
protected:  
private:  
};  
void test()
{
cout<<"sizeof(A)="<<sizeof(A)<<endl;  //1
   cout<<"sizeof(B)="<<sizeof(B)<<endl;  //1
   cout<<"sizeof(C)="<<sizeof(C)<<endl;  //1
   cout<<"sizeof(D)="<<sizeof(D)<<endl;  //8 虚继承指向虚基类的指针
   cout<<"sizeof(E)="<<sizeof(E)<<endl;  //8 共享虚继承指向虚基类的指针
   cout<<"sizeof(F)="<<sizeof(F)<<endl; //4
}
    }
    namespace test_class_size2
    {
    struct A {  

int a;  

virtual ~A(){}  

};  

struct B:virtual public A{  

virtual ~B(){}  

virtual void myfunB(){}  

};  

struct C:virtual public A{  

virtual ~C(){}  

virtual void myfunC(){}  

};  

struct D:public B,public C{  

virtual ~D(){}  

virtual void myfunD(){}  

};  
void test()
{
cout<<"sizeof(A)="<<sizeof(A)<<endl;  //16 int对齐到8字节+8字节的虚指针
   cout<<"sizeof(B)="<<sizeof(B)<<endl;  //24  在上面的基础上+8字节的指向虚基类的指针
   cout<<"sizeof(C)="<<sizeof(C)<<endl;  //24 //同上
   cout<<"sizeof(D)="<<sizeof(D)<<endl; //32 //一个A的副本,在上面的基础上+一个从B或C里面指向A的指针
}
    }
    namespace test_class_size3
    {
    struct A {  

int a;  

virtual ~A(){}  

};  

struct B: public A{  

virtual ~B(){}  

virtual void myfunB(){}  

};  

struct C: public A{  

virtual ~C(){}  

virtual void myfunC(){}  

};  

struct D:public B,public C{  

virtual ~D(){}  

virtual void myfunD(){}  

};  
void test()
{
cout<<"sizeof(A)="<<sizeof(A)<<endl;  //16
   cout<<"sizeof(B)="<<sizeof(B)<<endl;  //16
   cout<<"sizeof(C)="<<sizeof(C)<<endl;  //16
   cout<<"sizeof(D)="<<sizeof(D)<<endl; //32
}
    }

namespace test_class_size2解释:A中int+虚表指针(16)。B,C中由于是虚继承因此大小为A+指向虚基类的指针,B,C
虽然加入了自己的虚函数,但是虚表指针是和基类共享的,因此不会有自己的虚表指针。D由于B,C都是虚继承,因此D只包
含一个A的副本,于是D大小就等于A+B中的指向虚基类的指针+C中的指向虚基类的指针。(16+8+8)
namespace test_class_size3解释:A中int+虚表指针(16)。D由于B,C不是虚继承,因此D包含两个A的副本,于是D大
小就等于A+A的大小。

java中File类总结

Java文件操作我个人认为重要的问题有:    a:如何跨平台问题    b:文件编码问题,尤其是多语言平台情况下如何正常工作。    c:文件读写效率、操作效率    d:文件加密和文件...
  • jiaoph
  • jiaoph
  • 2016年10月28日 22:31
  • 68

c++ 类大小(含虚函数)

虽然很难找到一本不讨论多态性的C++书籍或杂志,但是,大多数这类讨论使多态性和C++虚函数的使用看起来很难。我打算在这篇文章中通过从几个方面和结合一些例子使读者理解在C++中的虚函数实现技术。说明一点...
  • FrankieWang008
  • FrankieWang008
  • 2011年12月20日 13:06
  • 2846

类与继承总结

一、类之间的关系 在面向对象技术中,类是数据和操作的集合,他们之间有三种主要关系:has-a,uses-a和is-a。 has-a表示类的包含关系,用于描述一个类由多个“部件类”构成。C++实现h...
  • Gao__Xiong
  • Gao__Xiong
  • 2016年03月11日 21:44
  • 490

python中类的总结

关于python中类的部分总结
  • kellyseeme
  • kellyseeme
  • 2016年04月22日 19:45
  • 1375

【Java】java中类的大小

http://blog.csdn.net/aaa1117a8w5s6d/article/details/8254922 在Java中,一个空Object对象的大小是8byte,这个大小只是保存堆...
  • michellechouu
  • michellechouu
  • 2014年09月22日 16:43
  • 684

c++类的大小计算

c++中类所占的大小计算并没有想象中那么简单,因为涉及到虚函数成员,静态成员,虚继承,多继承以及空类等,不同情况有对应的nisan方式,在此对各种情况进行总结。 首先要明确一个概念,平时所声明的类只是...
  • fengxinlinux
  • fengxinlinux
  • 2017年06月01日 23:01
  • 2036

(JAVA)Object类总结

Object类学习总结在Java中有这样一个类,它是所有类的祖先,任何类都是其子孙类,它就是java.lang.Object,如果一个类没有显式地指明其父类,那么它的父类就是Object。 Obje...
  • liufei89
  • liufei89
  • 2015年05月14日 14:53
  • 378

string类总结

从C到C++ string类C语言的字符串函数,简单而高效。C++ string类,功能强大而复杂(对于我这样的人来讲,复杂了点)。简单的比较没有意义,只是在特定的情况下哪一个更适合的问题。而在决定哪...
  • dawnangel
  • dawnangel
  • 2008年08月03日 00:47
  • 394

C++类对象大小的计算(二)含有虚函数类大小计算

以下内存测试环境为Win7+VS2012
  • gongtxy
  • gongtxy
  • 2014年10月01日 15:54
  • 1055

集成类项目小结

概述该项目是我方参与整个APP的部分模块开发,将开发好得功能以SDK的方式提供给APP调用。开发任务比较简单,主要问题出在sdk集成上面,下面记录开发中遇到的问题,还有部分关键技术。...
  • moxiouhao
  • moxiouhao
  • 2017年06月20日 11:55
  • 212
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:类大小总结
举报原因:
原因补充:

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