具有虚函数的类的大小

时间:2014-03-01 11:05:22

标签: c++ sizeof virtual-functions memory-alignment

我正在修改C ++概念,但我遇到了一个非常简单的代码

#include <iostream>
using namespace std;

class foo {
public:
    //int i;
    void virtual foobar()
    {
        cout << "foobar\n";
    }
};

int main()
{
    foo f;
    cout << sizeof(f) << endl;
    //cout << sizeof(f.i) << endl;
    return 1;
}

上述代码的输出为8 但是当我从代码中删除评论时 输出为16和4

我不明白当班级没有成员变量时,VPTR大小为8但是在添加变量大小后变为12。

1 个答案:

答案 0 :(得分:3)

您正在开发一个指针与8个字节对齐的平台。由于虚拟表指针通常是对象布局中的第一件事,因此它也必须对齐到8个字节。因此在int成员之后插入填充4个字节,这就是为什么你得到16的大小(vf表指针为8个字节,int为4个字节和4个填充字节)。