【发布时间】:2020-10-31 23:41:03
【问题描述】:
我正在使用https://www.onlinegdb.com/online_c++_compiler 尝试下面的虚拟继承程序..
#include <iostream>
using namespace std;
class ABase{
int iMem;
};
class BBase : public virtual ABase {
int iMem;
};
class CBase : public virtual ABase {
int iMem;
};
class ABCDerived : public BBase, public CBase {
int iMem;
};
int main()
{
cout << "Int is :" << sizeof(int) <<endl;
cout << "Abase is :" << sizeof(ABase) << endl;
cout << "Abase is :" << sizeof(BBase) << endl;
cout << "Abase is :" << sizeof(CBase) << endl;
cout << "Abase is :" << sizeof(ABCDerived) << endl;
return 0;
}
ABase、BBase、CBase 和 ABCDerived 的大小分别为 4、16、16 和 40。
通常从我读到的内容中,我希望 BBase 和 CBase 为 12 个字节(两个 int 变量为 8 个字节,vPtr 为 4 个字节)。但是我得到 16,即使我假设 vPtr 使用 8 字节,ABCDerived 怎么会有 40 字节大小?
OnlineGBD 工具声称使用 G++/C++ 编译器。
我知道以前在这个论坛上也有人问过类似的问题,但我无法理解这个尺寸计算。
【问题讨论】:
-
一个词:padding.