【发布时间】:2015-09-01 10:04:57
【问题描述】:
虚拟继承内存布局
我试图通过虚拟继承和 vTables/vPtrs 完全了解内存中发生的事情以及其他情况。
我有两个我编写的代码示例,我完全理解它们为什么起作用,但是我只是想确保我对对象内存布局有正确的想法。
Here是图中的两个例子,我只是想知道我对所涉及的内存布局的想法是否正确。
示例 1:
class Top { public: int a; };
class Left : public virtual Top { public: int b; };
class Right : public virtual Top { public: int c; };
class Bottom : public Left, public Right { public: int d; };
示例 2:
同上,但有:
class Right : public virtual Top {
public:
int c;
int a; // <======= added this
};
【问题讨论】:
-
一个好的起点是the itanium abi,因为这都是特定于实现的
-
@Mgetz 有点不确定为什么你会建议从 Itanium ABI 开始,当 x86 或 amd64 ABI 在统计上更有可能与原始问题相关 - 或者我可能遗漏了一些东西确定安腾平台的问题...?
-
@twalberg 因为安腾 ABI 甚至在 X86-64 for c++ 上也被用作标准 ABI
-
您的问题似乎自相矛盾:
Top应该是多态的吗?
标签: c++ oop inheritance multiple-inheritance virtual-inheritance