gpt4 book ai didi

c++ - 与位置无关的代码和 vtable

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:35:56 28 4
gpt4 key购买 nike

如何在位置无关代码中实现虚函数?

我知道如果我的类有虚函数,编译器通常会为它生成一个 vtable,其中包含所有虚函数的地址,并在我的类的每个对象中存储一个指向 vtable 的指针。

现在,如果我的代码是位置无关的,编译器就无法知道虚函数(或任何函数)的地址。那么它有什么作用呢?

我想知道真正的编译器做了什么(不是理论上可能的);我最感兴趣的是 linux 32 位平台,但其他平台也有一些兴趣。

最佳答案

有两种选择:

  1. 接受您的 vtable 不会与位置无关,并尝试将其从代码部分移开,以便所有需要动态链接修复的代码彼此相邻,以减少不可共享页面的数量。 gcc 做这个
  2. 在虚表中使用相对跳转。我不知道有任何执行此操作的实现,并且它仅在 vtable 与方法实现存在固定偏移量时才有效,并且这些在加载时不能被覆盖(它们可以在典型的 ELF 系统上)。

关于c++ - 与位置无关的代码和 vtable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5377496/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com