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

原文链接: https://www.cnblogs.com/lfri/p/12420800.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++中的sizeof要点

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/333558

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午9:14
下一篇 2023年3月1日 下午9:14

相关推荐