您的位置:首页 > 编程语言 > C语言/C++

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

2018-03-19 13:02 375 查看
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个字节
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: