C++笔记 | C++ 类所占的空间大小统计方法

32位机器上,有三个类A B C定义如下, 请确定sizeof(A) sizeof(B) sizeof(C)的大小顺序.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

struct A{

    A() {}

    ~A() {}

    int m1;

    int m2;

};

struct B:A{

    B() {}

    ~B() {}

    int m1;

    char m2;

    static char m3;

};

struct C{

    C() {}

    virtual~C() {}

    int m1;

    short m2;

};

首先是A,普通成员函数以及构造函数析构函数不归入统计范围,两个int是8个字节,因此A是8个字节,对于B,由于他继承自A,有8个字节,一个int一个char分别是4个和1个字节,static静态成员不予考虑,B一共有8+5=13个字节

对于C,由于虚函数需要维持虚函数表,需要一个指针,32位机器为4个字节,一个Int一个short为6个字节,一共为10个字节

所以应该是A<C<B

Examples:

//空类:

class CBase

{ };

空类也会被实例化,编译器会给空类隐含的添加一个字节,sizeof()的结果是1。

 

//这个也是空类

class Base  

{  

public:  

    Base();  

    ~Base();  

}; //1字节

 

class CBase

{

public:

    CBase(void); //其他成员函数不归入sizeof统计

    virtual ~CBase(void); //虚析构函数 virtual ~Base() 的指针占4子字节

private:

    int  a;   //32位机器上,32 / 8 = 4 字节

    char *p;  // 同上 4字节

};//一共 4 + 4 + 4 = 12 字节

class Derive:public Base  //Derive类首先要具有Base类的部分,也就是占12字节

{  

public:  

    Derive():Base(){};      

    ~Derive(){};  

private:  

    static int st;        //非实例独占 , static int st;不归入sizeof统计 

    int  d;                    //占4字节  

    char *p;                   //4字节指针  

  

};  //12 + 8 = 20 字节

另外需要注意Short是2个字节

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值