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

posted @ 2019-09-20 11:55  朱小勇  阅读(687)  评论(0编辑  收藏  举报