zoukankan      html  css  js  c++  java
  • C++中类所占的存储空间

    #include <iostream>
    
    using namespace std;
    
    class A
    {
        int m_a;
    
        int get()
        {
            return m_a;
        }
    
        virtual void set(int a)
        {
            m_a = a;
        }
        virtual int get(int a)
        {
            return m_a;
        }
    
        virtual ~A(){}
    };
    
    class B
    {
    
    };
    
    struct C
    {
    
    };
    
    void main()
    {
        cout<<sizeof(A)<<endl;
        cout<<sizeof(B)<<endl;
        cout<<sizeof(C)<<endl;
    }

    分析如下:

    
    

    类所占的空间 = 类成员变量所占空间 + 4(如果存在虚函数的话);

    
    

    注意:

    
    

    1、类成员所占的空间可能会涉及到内存数据对齐的问题,需要谨慎考虑;

    
    

          1)当成员变量的长度都小于处理器位数时,所有成员变量所占的总空间一定是最长的变量所占空间的整数倍;

    
    

          2)如果某一成员变量长度大于处理器位数,则以处理器的位数为对齐单位;

    
    

          关于数据对齐,详见:http://blog.csdn.net/tangbo1987/article/details/6766918

    
    

    2、如果类成员函数不是虚函数,则它不占空间;

    
    

    3、如果成员函数中存在虚函数,则所有的虚函数保存在虚函数表中,然后类中会有一个指针指向该表;这个指针需要占用空间,所以需要 +4;

    此外,空类所占的空间为1字节,因为:“一个类能够实例化,编译器就需给它分配内存空间,来指示类实例的地址;这里编译器默认分配了一个字节(如:char),以便标记可能初始化的类实例,同时使空类占用的空间也最少(即1字节)”      --引用 http://blog.csdn.net/sunboy_2050/article/details/6589999 

    空结构体同理。

     
  • 相关阅读:
    接口分类
    HTTPS和HTTP的主要区别
    协议类
    小程序
    Polyfill
    去重数组
    odoo 接口跨域请求报错
    docker-compose 自定义容器名称
    linux ssh 防暴力破解fail2ban
    odoo 知识点
  • 原文地址:https://www.cnblogs.com/leijiangtao/p/4489221.html
Copyright © 2011-2022 走看看