class的大小

Posted lakeone

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了class的大小相关的知识,希望对你有一定的参考价值。

3个问题:

sizeof一个空类是多大?为什么?编译器为什么这么做?

在这个类中添加一个virtual函数后再sizeof,这时是多大?为什么?

将这个类再virtual继承一个其它的空类,这是多大?为什么?

class A
{
};

class B
{
    virtual void print()
    {
        cout << "B" << endl;
    }
};


class C : public A
{
    virtual void print()
    {
        cout << "C" << endl;
    }
};

int main()
{
    cout << sizeof(A) << endl;
    cout << sizeof(B) << endl;
    cout << sizeof(C) << endl;

    return 0;
}

结论:

1.对象是存在于内存中的实体,编译器必须为其分配内存空间(C++编译器还为每个类默认生成了&取地址运算符函数)。所以如果是空类,编译器也会分配一个字节。

2.如果在空类中加入一个virtual函数后,类对象的内存空间为vfptr(指向虚函数表的指针),不再需要插入一个字节。

3.继承一个空类时,空类的“那一个字节”是不会存在派生类中的

以上是关于class的大小的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 快速开发 代码块

解决spring-boot启动中碰到的问题:Cannot determine embedded database driver class for database type NONE(转)(代码片段

Xcode 快速开发 代码块 快捷键

14.VisualVM使用详解15.VisualVM堆查看器使用的内存不足19.class文件--文件结构--魔数20.文件结构--常量池21.文件结构访问标志(2个字节)22.类加载机制概(代码片段

java 反射代码片段

从JVM的角度看JAVA代码--代码优化