vftable-这是什么?
高级编程语言中的 vftable 是什么?
我读到类似虚拟对象结构的地址之类的内容,但这是一个非常混乱的信息
有人可以解释一下吗?
What is vftable in high programming languages?
I read something like it's the address of a virtual object structure, but this is a pretty messy information
Can someone please explain it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
它很可能代表“虚拟函数表”,并且是某些运行时实现使用的机制为了允许虚拟函数调度。
主流 C++ 实现(GCC、Clang、MSVS)将其称为
vtable
。 C没有多态性。我只能推测其他语言。以下是维基百科关于该主题的说法:
It most likely stands for "Virtual Function Table", and is a mechanism used by some runtime implementations in order to allow virtual function dispatch.
Mainstream C++ implementations (GCC, Clang, MSVS) call it the
vtable
. C has no polymorphism. I could only speculate about other languages.Here's what Wikipedia says on the topic:
C++ 标准中没有明确提及 Vftable,但大多数(如果不是全部)实现都使用它来实现虚函数。
对于每个具有虚函数的类,编译器都会创建一个函数指针数组,这些指针指向该类的虚函数的最后一个重写版本。然后每个对象都有一个指向其动态类的vtable的指针。
请参阅此问题及其接受的答案以获取更多说明
虚拟调度实现详细信息
Vftable is not explicitly mentioned in the C++ standard, but most (if not all) implementations use it for virtual function implementation.
For each class with virtual functions the compiler creates an array of function poiners which are the pointers to the last overriden version of the virtual functions of that class. Then each object has a pointer to the vtable of its dynamic class.
See this question and its accepted answer for more illustrations
Virtual dispatch implementation details