吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 574|回复: 4
收起左侧

[求助] VS开发命令行分析虚基类的内存分布结果中的o.vbte和fVtorDisp的含义

[复制链接]
tafeita 发表于 2023-8-8 23:47
本帖最后由 tafeita 于 2023-8-8 23:49 编辑

在用Visual Studio的开发命令行查看虚基类的继承关系时,最后会给出如附图的索引结果,想求助各位大神,第四列的o.vbte和第五列的fVtorDisp是何含义?

VS内存分析.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

rwj1990 发表于 2023-8-9 10:23
o.vbte: 这个符号代表"Offset to Virtual Base Table Entry",它用于存储虚基类的偏移量。虚基类是继承体系中的一个特殊概念,它允许在继承链中只有一个共享的基类实例。虚基类的偏移量需要在运行时计算,以便能够正确访问虚基类的成员。

fVtorDisp: 这个符号代表"Virtual Function Table Offset Reference",它用于存储虚函数表的偏移量。虚函数表(vtable)是用于支持多态性的数据结构,存储了类的虚函数指针。当你在派生类中重写虚函数时,对应的虚函数表的位置会被更新,以便正确调用派生类的虚函数。
在类A中,offset为12,表示类A相对于自身的基类的偏移量,o.vhptr为4,表示对象虚表指针的偏移量,o.vhte为4,表示虚函数表中的第4个函数(这与类A的虚函数的顺序有关),f UtorDisp为0,表示虚基类表中的偏移量引用。

在类B中,offset为0,表示类B相对于自身的基类的偏移量(类B没有基类,所以为0),o.vhptr为4,表示对象虚表指针的偏移量,o.vhte为8,表示虚函数表中的第8个函数,f UtorDisp为0,表示虚基类表中的偏移量引用。

在类C中,offset为32,表示类C相对于自身的基类的偏移量,o.vhptr为4,表示对象虚表指针的偏移量,o.vhte为1,表示虚函数表中的第1个函数,f UtorDisp为2,表示虚基类表中的第2个偏移量引用

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
tafeita + 1 + 1 谢谢@Thanks!

查看全部评分

 楼主| tafeita 发表于 2023-8-9 13:46
rwj1990 发表于 2023-8-9 10:23
o.vbte: 这个符号代表"Offset to Virtual Base Table Entry",它用于存储虚基类的偏移量。虚基类是继承体 ...

谢谢解答,非常详细,非常感谢!
这是个简单的菱形虚拟继承的内存分析,代码如下:
[C++] 纯文本查看 复制代码
class A{
public:
    virtual void f() {}
    virtual void g() {}
private:
    int DataA;
}

class B : public virtual A
{
public:
    virtual void f() {}
    virtual void h() {}
private:
    int DataB;
}

class C : public virtual A
{
public:
    virtual void f() {}
    virtual void h() {}
private:
    int DataC;
}

class D : public virtual B, public virtual C
{
public:
    virtual void f() {}
    virtual void j() {}
private:
    int DataD;
}

int main()
{
    return 0;
}
rwj1990 发表于 2023-8-9 14:01
tafeita 发表于 2023-8-9 13:46
谢谢解答,非常详细,非常感谢!
这是个简单的菱形虚拟继承的内存分析,代码如下:
[mw_shl_code=cpp,t ...

通过继承和重写虚函数,可以实现多态性,同时虚基类的使用
 楼主| tafeita 发表于 2023-8-9 22:41
rwj1990 发表于 2023-8-9 14:01
通过继承和重写虚函数,可以实现多态性,同时虚基类的使用

受教了,多谢大神指点
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:58

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表