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

  • 相关阅读:
    Docker入门(windows版),利用Docker创建一个Hello World的web项目
    SpringBoot集成JWT实现token验证
    Jedis的基本操作
    Java动态代理详解
    SpringBoot利用自定义注解实现通用的JWT校验方案
    递归——汉诺塔问题(python实现)
    Datatable删除行的Delete和Remove方法的区别
    C# DEV使用心得
    总结
    安装插件时
  • 原文地址:https://www.cnblogs.com/lfri/p/12420800.html
Copyright © 2011-2022 走看看