Programming languages vftable-这是什么?
什么是高级编程语言中的vftable 我读到的东西好像是虚拟对象结构的地址,但这是一个相当混乱的信息 有人能解释一下吗?它很可能代表“”,并且是一些运行时实现为了允许的一种机制Programming languages vftable-这是什么?,programming-languages,virtual,reverse-engineering,Programming Languages,Virtual,Reverse Engineering,什么是高级编程语言中的vftable 我读到的东西好像是虚拟对象结构的地址,但这是一个相当混乱的信息 有人能解释一下吗?它很可能代表“”,并且是一些运行时实现为了允许的一种机制 主流C++实现(GCC,Clang,MSVS)称之为代码> VTABs/CODE >。C没有多态性。我只能推测其他语言 以下是维基百科对这个话题的看法: 对象的调度表将包含对象的 动态绑定方法。方法调用是通过获取 对象分派表中方法的地址。调度表 对于属于同一类的所有对象都是相同的,并且 因此,它们之间通常是共享的。属于
主流C++实现(GCC,Clang,MSVS)称之为代码> VTABs/CODE >。C没有多态性。我只能推测其他语言
以下是维基百科对这个话题的看法: 对象的调度表将包含对象的 动态绑定方法。方法调用是通过获取 对象分派表中方法的地址。调度表 对于属于同一类的所有对象都是相同的,并且 因此,它们之间通常是共享的。属于 类型兼容类(例如继承中的同级) 层次结构)将具有具有相同布局的调度表:地址 给定方法的偏移量将显示在所有方法的相同偏移量处 类型兼容类。因此,从 给定的调度表偏移量将获得与 对象的实际类。[1] <> P> C++标准并没有严格规定动态调度必须是怎样的 已实现,但编译器通常在同一版本上使用较小的变体 基本模型 通常,编译器为每个类创建一个单独的vtable。什么时候 创建了一个对象,一个指向此vtable的指针,称为虚拟表 表指针vpointer或VPTR被添加为该表的隐藏成员 对象(成为其第一个成员,除非它成为最后一个[2])。这个 编译器还在每个类的构造函数中生成“隐藏”代码 将其对象的vpointers初始化为 相应的vtable。请注意,vpointer在 对象实例不是所有编译器中的标准实例,依赖于 该位置可能导致不可移植代码。例如,g++ 以前将vpointer放置在对象的末尾。[3]
你是说某一种语言吗?有一种语言,你读过吗?你可以自己用C构建一个vtable-你的意思是“C没有多态性的语言原语”:-@Kerrek:是的;我们正在讨论“vftable”在“高级编程语言”中是什么,即作为语言的一部分。:)如果可以的话,我会把接受点一分为二,因为你的链接也给了我有用的信息