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

  • 相关阅读:
    ##3.Keystone 验证服务--openstack
    gitlab一键安装+配置(备份+LADP认证)
    【hexo】03config文件配置详解
    【hexo】01安装
    第6章 linux的文件权限与目录配置
    ubuntu14.04安装Anaconda
    ubuntu14.04安装opencv-python
    ubuntu14.04配置face_recognition环境
    php7 安装时需求的依赖包
    删除包的时候因为依赖关系导致失败的解决方法
  • 原文地址:https://www.cnblogs.com/lfri/p/12420800.html
Copyright © 2011-2022 走看看