3

我听说过使用“vtable fixup”这个术语。这是什么意思?我问谷歌没有成功。我已经知道什么是 vtable,所以不需要定义。

4

2 回答 2

5

对我来说,谷歌透露 vtable 修复是 PE (Windows) 可执行文件格式的一个特殊功能。根据ECMA 的 PE 规范,它们提供了一种有效的实现 vtables 的方法(用于 C++ 和其他语言) :

某些选择不遵循通用类型系统运行时模型的语言可能具有需要在 v-table 中表示的虚函数。这些 v-table 由编译器而不是运行时布置。查找正确的 v-table 槽并通过该槽中保存的值间接调用也是由编译器完成的。运行时标头中的 VtableFixups 字段包含 Vtable Fixups 数组的位置和大小(参见第 14.5.1 节)。V-tables 应该被发送到 PE 文件的读写部分。

此数组中的每个条目都描述了指定大小的 v-table 槽的连续数组。每个插槽开始初始化为他们需要调用的方法的元数据标记值。在图像加载时,运行时加载程序会将每个条目转换为指向 CPU 机器代码的指针,并且可以直接调用。

于 2010-02-08T21:46:19.573 回答
4

简单的答案:允许不同编译器/语言生成的代码共存是一种技巧。它允许运行时在不知道实现细节的情况下找到虚函数的位置。

于 2010-02-08T21:49:50.620 回答