什么是 vtable 锚定,以及它在共享对象中的工作原理

What is vtable anchoring, and how does it work in a shared object?

本文关键字:对象 共享 工作 vtable 锚定 什么      更新时间:2023-10-16

我正在研究C++库的一些问题,并确保应用程序和共享对象之间的类型信息一致。我也有兴趣确保EqualObject比较有效,这意味着我确实有相同的对象,而不是两个碰巧在operator==下相等的对象。

此答案状态用于在标头中锚定 vtable。我不熟悉这项技术。或者我听说它叫了另一个名字。

什么是 vtable 锚定,它是如何工作的?


我也知道dynamic_cast、抛出、typeid 不适用于 GCC 常见问题解答中的共享库。

这是非标准技术,但问题相当明显:哪个翻译单元应该包含 vtable?如果虚拟析构函数不是内联的,则它只在一个翻译单元中定义,将 vtable 放在那里是一种简单的选择。

对于可移植代码,这是无关紧要的。你不会关心重复的vtables。