用g ++编写C ++类的内存分配

时间:2015-02-13 03:33:02

标签: c++ memory g++ virtual-functions

我有以下C ++代码。

#include<iostream>
using namespace std;

class A
{
    int aa;
    public:

    virtual void sound()
    {
        cout << "I am A" << endl;   
    }
};

class B:public A
{
    int bb;
    public:

    void sound()
    {
        cout << "I am B" <<endl;    
    }
};

class C:public B
{
    int cc;
    public:

    void sound()
    {
        cout << "I am C"<<endl; 
    }
};

int main()
{
    A* a = new A();
    B* b = new B();
    C* c = new C();
    cout << "size of A :" << sizeof(A) << endl;
    cout << "size of B :" << sizeof(B) << endl;
    cout << "size of C :" << sizeof(C) << endl; 
}

此代码生成以下输出。

A的大小:16 B的大小:16 大小C:24

如果没有在A类声音方法中的虚拟关键字,它就会产生。

A的大小:4 B的大小:8 大小C:12

所以,这意味着对于v-table,已经分配了一些内存,并且它们在3个类中不相等。当有虚函数和没有虚函数时,我无法弄清楚每个类分配了多少内存。有人可以在2个场景中解释我。

更新1: 编译器版本:gcc版本4.8.2(Ubuntu 4.8.2-19ubuntu1) 操作系统:ubuntu 14.04

更新2: 给出可能的重复说明结构中的填充。当在这里应用相同的概念时,解决了关于虚函数的问题。但是当我们删除虚拟关键字时,似乎父类的私有变量已进入子类。有人可以解释一下吗?

0 个答案:

没有答案