【问题标题】:What does "vtable fixup" mean?“vtable fixup”是什么意思?
【发布时间】:2011-01-14 13:04:21
【问题描述】:

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

【问题讨论】:

  • 这听起来是特定于编译器的。发布有关您看到此情况的更多信息,您可能会得到更好的回应。
  • VTable 与 C++ 无关。一些编译器使用它们来实现 C++ 功能,但没有更多上下文,就没有真正的问题答案。
  • 我听说它用于在另一个可能不支持多态性或可能具有不同内存布局、不同字长等的平台上重建多态类型(在一个平台上)的数据的上下文中。它只是“当数据从一个平台序列化到另一个平台时,让多态类型在另一个平台上工作”的总称吗?
  • 根据您的描述,这是“我们没有以独立于平台的方式序列化我们的数据,我们将其移动到另一个平台,现在我们陷入困境”的通用术语。

标签: c++ vtable fixup


【解决方案1】:

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

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

此数组中的每个条目描述一个 v 表槽的连续数组 指定的大小。每个插槽开始 out 初始化为元数据令牌 他们需要的方法的价值 称呼。在图像加载时,运行时 加载器会将每个条目变成一个 指向 CPU 机器码的指针 并且可以直接调用。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 2017-06-11
      • 2018-03-05
      • 2023-03-27
      相关资源
      最近更新 更多