C++中的sizeof要点

#include <iostream>
#include <string>
using namespace std;

// 1
class emptyClass0{

};

// 1
class emptyClass1{
public:
    emptyClass1(){}
    ~emptyClass1(){}
};

// 4
class emptyClass2{
public:
    emptyClass2(){}
    virtual ~emptyClass2(){}
};

// 8
class hwcBase{
public:
    hwcBase(){}
    virtual  ~hwcBase(){}
private:
    int base;
};

// 12
class hwcSubFirst:hwcBase{
public:
    hwcSubFirst():hwcBase(){}
    ~hwcSubFirst(){}
private:
    int sub;
};

// 12 + 1+3, 考虑到内存对齐
class hwcSubSecond:hwcBase{
public:
    hwcSubSecond():hwcBase(){}
    ~hwcSubSecond(){}
private:
    int sub;
    char sub2;
};

int main()
{
    cout<<sizeof(emptyClass0)<<endl;
    cout<<sizeof(emptyClass1)<<endl;
    cout<<sizeof(emptyClass2)<<endl;
    cout<<sizeof(hwcBase)<<endl;
    cout<<sizeof(hwcSubFirst)<<endl;
    cout<<sizeof(hwcSubSecond)<<endl;
    return 0;
}

解释下:

0、1、对于一个空的类,在内存中要存在一个标示来区分,所以即使是空的,也要分配一个字节

2、同样是empty的类,但是有一个虚的析构函数,所以,保存了一个指针(vptr)指向虚表。一个指针4Byte

3、hwcBase类,有一个Int占用4Byte,一个指针(vptr),所以共占用8Byte

3、hwcSubFirst,继承来一个Int,本身有一个Int,加上一个vptr指针,共12字节

4、hwcSubSecond,和hwcSubFirst类似,但是多了一个char,考虑到内存对其,12+4 = 16字节

参考链接:https://blog.csdn.net/Hello_Hwc/article/details/41170719

猜你喜欢

转载自www.cnblogs.com/lfri/p/12420800.html