C/C++中sizeof的运用

来源:互联网 发布:瓷器餐具品牌 知乎 编辑:程序博客网 时间:2024/06/05 02:02

 通过实践将个人对sizeof的理解写到这里,还望大家的指点

以下是我的实践代码

#include <iostream.h>
class A{};
class B
{
 int a;
 char c;
 static int s;
};
class C
{
 int d;
 virtual void f();
};
class D:virtual public B
{
 double dd;
};
class E:public C
{
 virtual void f1();
};
class F:virtual public B
{
 
};
class G:public D,F
{

};
void main()
{
 int a[20];
 int *p;
 double *da[20];
 cout<<"double类型   "<<sizeof(double)<<endl;//double类型占有8个字节
 cout<<"整型数组  "<<sizeof(a)<<endl;//数组占有4*20个字节
 cout<<"int类型指针 "<<sizeof(p)<<endl;//指针占有4个字节
 cout<<"double指针数组  "<<sizeof(da)<<endl;//double指针类型的数组占有4*20个字节,因为指针式占有四个字节的
 cout<<"empty class "<<sizeof(A)<<endl;//空类占有一个字节,因为每个实例在内存中都有一个独一无二的地址,
           //为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,
           //这样空类在实例化后在内存得到了独一无二的地址
 cout<<"带有两个普通成员一个静态成员的类   "<<sizeof(B)<<endl;//B类的大小事8,因为内存对齐,所以c后面有3个字节是空的,而s是static类型属于全局数据区的
 cout<<"带有虚函数的类   "<<sizeof(C)<<endl;//int型4个字节,虚指针4个字节
 cout<<"虚拟继承 "<<sizeof(D)<<endl;//double占8个字节,基类中的int和char类型共占8个字节,多三个字节空着
                //虚指针占4个字节,多4个空着为了字节对齐
 cout<<"基类中有虚函数,本类中也有虚函数  "<<sizeof(E)<<endl;//基类C中的int型占四个字节,基类和派生类中的虚函数共用一个虚指针
                 //占用4个字节
 cout<<"虚拟继承的类 "<<sizeof(F)<<endl;//从基类中派生过来的成员有8个字节,虚指针4个字节,共12个字节
 cout<<"多重继承 "<<sizeof(G)<<endl;//从基类中得到的成员共D类中double8个字节,B类中int和char共8个字节,
              //D类和F类中分别8个虚指针字节所以共32个字节
}

 

 

 

以下为代码的运行结果

 double类型   8
整型数组  80
int类型指针 4
double指针数组  80
empty class     1
带有两个普通成员一个静态成员的类   8
带有虚函数的类   8
虚拟继承        24
基类中有虚函数,本类中也有虚函数        8
虚拟继承的类    12
多重继承        32

 

 

 

原创粉丝点击