zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    课程笔记:——Javascript 中的预解释1
    我的博客园开通了~
    scheduling algorithm
    jQuery实现全选,全不选,反选
    jQuery实现表格选中行变色
    程序员永远的鸡血
    大家好,欢迎来到我的博客,我们一起成长,见证奇迹!
    存储过程和触发器优缺点分析
    ECStore去掉Index.php的方法
    C# 编码与解码
  • 原文地址:https://www.cnblogs.com/lfri/p/12420800.html
Copyright © 2011-2022 走看看