Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么是;vtable fixup“;什么意思?_C++_Vtable_Fixup - Fatal编程技术网

C++ 什么是;vtable fixup“;什么意思?

C++ 什么是;vtable fixup“;什么意思?,c++,vtable,fixup,C++,Vtable,Fixup,我听说过这个术语,“vtable fixup”。这是什么意思?我问谷歌没有成功。我已经知道什么是vtable,所以不需要定义它。对我来说,vtable补丁是PE(Windows)可执行文件格式的一个特殊功能。它们提供了一种实现VTABLE(C++和其他语言)的有效方法,根据: 某些语言选择不使用 遵循公共类型系统运行时 模型,可能具有虚拟功能 需要在 v形桌。这些v形桌是摆好的 由编译器而不是运行时执行。 找到正确的v形工作台插槽和 通过值间接调用 在该插槽中保持也由 编译器。中的VtableF

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

对我来说,vtable补丁是PE(Windows)可执行文件格式的一个特殊功能。它们提供了一种实现VTABLE(C++和其他语言)的有效方法,根据:

某些语言选择不使用 遵循公共类型系统运行时 模型,可能具有虚拟功能 需要在 v形桌。这些v形桌是摆好的 由编译器而不是运行时执行。 找到正确的v形工作台插槽和 通过值间接调用 在该插槽中保持也由 编译器。中的VtableFixups字段 运行时标头包含 数组的位置和大小 Vtable固定装置(见第14.5.1条)。 应将V形台发射到 PE文件的读写部分

此数组中的每个条目都描述一个 的v形表插槽的连续数组 指定的大小。每个插槽开始 out初始化为元数据令牌 他们需要的方法的值 呼叫在映像加载时,运行时 加载器将把每个条目转换为 指向CPU的机器代码的指针 可以直接调用


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

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