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,那么此类数组中的各个对象的地址将会一致,明显违反了此原则】

  • 相关阅读:
    【读书笔记】房龙-人类的故事
    【读书笔记】曼昆-经济学原理:宏观经济学分册
    【读书笔记】曼昆-经济学原理:微观经济学分册
    ES6数组去重
    switch语句
    if语句的优化
    程序的三大结构
    NaN
    js中常见的数据类型
    变量的命名规则
  • 原文地址:https://www.cnblogs.com/judes/p/11556129.html
Copyright © 2011-2022 走看看