为什么虚拟表很重要
why virtual table matters?
为了实现动态绑定,对于每个类,都有一个虚拟表来存储每个函数的地址。为什么需要这种间接寻址?我们可以让类直接将 PTR 存储到正确的函数中吗?
事实上,
你可以这样做。然后,每个多态类的每个实例都需要将其整个虚拟表存储为对象的一部分。对于具有大量虚拟方法的类,这将是一个很大的内存开销。不能保证它会更快,因为您可以通过存储如此多的冗余数据来减少缓存局部性。
相关文章:
- 如果整个应用程序是虚拟映射的,为什么 new 会进行系统调用?
- 为什么调用没有正文的纯虚拟方法不会导致链接器错误?
- 为什么使用存储在虚拟方法表中的地址调用虚拟函数的函数会返回垃圾?
- 为什么我无法覆盖虚拟功能?
- 为什么在这种情况下不调用我的虚拟函数实现?
- 为什么构造函数的虚拟函数调用有时有效,但其他调用却无效
- 在钻石问题的求解中,为什么要虚拟地继承两次grand-parent类
- 为什么这个虚拟方法不能内联?
- 为什么"设置"/"拆解"在 gtest 中是虚拟的?
- 如果在创建对象时创建了 VPTR,那么为什么具有虚拟功能的类的大小在 32 位系统上为 4,在 64 位机器上为 8
- 为什么虚拟方法生成对_sbrk的未定义引用?
- 为什么虚拟循环会消耗内核时间?
- 如果一个类继承了一个带有虚拟 dtor 的类,为什么要删除一个没有虚拟 dtor 的类是可以的
- 为什么我只能在 4 GB 的虚拟内存空间上分配 2 GB?
- 为什么在std::optional的某些实现中有一个虚拟工会成员?
- 为什么我不能拥有纯虚拟分配操作员?
- 为什么虚拟继承即使不涉及虚拟功能也需要 vtable?
- 为什么基指针可以访问虚拟函数中的派生成员变量
- 为什么不调用虚拟基非默认构造函数,除非大多数派生基显式调用它们?
- 为什么我的虚拟破坏者多次执行这些执行