gpt4 book ai didi

c++ - 在 C++ 中查找内存中某个类的对象布局的算法

转载 作者:行者123 更新时间:2023-11-30 03:15:40 24 4
gpt4 key购买 nike

考虑以下代码:

class A {
public:
    virtual ~A();
    virtual void foo();
};
class B : public A {
public:
    virtual ~B();
    virtual void foo();
};

B类对象在内存中的布局如下:

enter image description here

当我们谈论多重继承时,很难在内存中布局某个类的对象,尤其是当我们谈论菱形继承时,或者当我们谈论像这样的虚类时:

class E : public C, public virtual D, public virtual B {
public :
E() {
cout << "E::E()" << endl;
}
E(int x) : D(x) {
cout << "E::E(int)" << endl;
}
};

我正在寻找一些解释如何显示此布局的伪算法。是否有这样的算法我可以遵循并手动构建那些布局(没有虚拟表)?

编辑:我得到以下示例:

enter image description here

解决方案部分的内存布局是:

enter image description here

只是不明白为什么会这样显示。所以我认为我可以遵循某种算法来构建它。

最佳答案

该布局取决于您的编译器所针对的 ABI。您应该研究 ABI 的文档以了解类在内存中的布局方式。

例如,GCC使用 Itanium ABI .

关于c++ - 在 C++ 中查找内存中某个类的对象布局的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56850026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com