我听过这个词,“vtable fixup”,用过。这是什么意思?我没有成功问谷歌。我已经知道vtable是什么,所以不需要定义。
答案 0 :(得分:5)
对我来说,Google透露vtable fixup是PE(Windows)可执行文件格式的一个特殊功能。根据{{3}},它们提供了一种实现vtable(用于C ++和其他语言)的有效方法:
某些语言,选择不这样做 遵循通用类型系统运行时 模型,可能有虚函数 需要在a中表示 v表。这些v表是布局的 由编译器,而不是运行时。 找到正确的v-table插槽和 通过价值间接呼唤 在那个插槽中举行也是由 编译器。 VtableFixups字段 运行时头包含 数组的位置和大小 Vtable Fixups(见第14.5.1节)。 V表应发射到 PE文件的读写部分。
此数组中的每个条目都描述了一个 连续的v表槽的数组 指定的大小。每个插槽开始 out初始化为元数据令牌 他们需要的方法的价值 呼叫。在图像加载时,运行时 Loader会将每个条目变成一个 指向CPU机器代码的指针 并且可以直接调用。
答案 1 :(得分:4)
简单的答案:允许不同编译器/语言生成的代码共存是一种破解。它允许运行时在不知道实现细节的情况下查找虚函数的位置。