“vtable fixup”是什么意思?

时间:2010-02-08 20:35:16

标签: c++ vtable fixup

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

2 个答案:

答案 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)

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