zoukankan      html  css  js  c++  java
  • C++类成员存储大小

    1、对象分布图

    2、解析

    每个类的大小只有其成员变量大小,其中包括:类成员属性,虚函数指针;

    而其他没有如:静态变量【静态区】,普通函数、静态函数【代码区】

    3、总结

    类对象的sizeof只包含成员变量的大小,不包含函数的大小【就跟结构体一样】,因为函数被放在了代码区,类对象调用代码的时候会把对象的指针传到函数那里,函数根据这个对象指针访问对象的内部属性

     4、代码

    class A{
    private:
        int a;    //4 bytes
        char b;    //4 bytes
        int c;    //4 bytes
        const int d=0;//4 bytes
        static int e; //0 bytes,存储在全局/静态区
    public:
        virtual void vTest()    //4 bytes,与返回值无关,只要有虚函数则有虚函数指针,占4bytes
        {
    
        }
        static void sTest()     //0 bytes,存储在公共代码区,参数个数为0
        {
    
        }
        void test()             //0 bytes,存储在公共代码区,参数个数为1【对象的this指针】
        {
    
        }
    };
    int A::e;

    ps:C中空结构体sizeof为0;C++中空结构体和空类sizeof为1【C++原则:任何不同的对象不能拥有相同的内存地址。如果空类对象大小为0,那么此类数组中的各个对象的地址将会一致,明显违反了此原则】

  • 相关阅读:
    Jedis入门
    redis的安装
    redis概述
    020 SpringMVC返回Json
    019 数据绑定流程分析(校验)
    018 数据绑定流程分析(包括数据转换与格式化)
    maven添加插件,与maven打包
    定制库到maven库
    maven仓库
    Maven启动代理访问
  • 原文地址:https://www.cnblogs.com/judes/p/11556129.html
Copyright © 2011-2022 走看看