首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >vtable的替代方案

vtable的替代方案
EN

Stack Overflow用户
提问于 2011-08-10 15:47:17
回答 1查看 909关注 0票数 9

Vtables在大多数OO实现中普遍存在,但它们有其他选择吗?vtables的wiki页面有一个简短的blurb,但是没有太多的信息(和短链接)。

您知道一些不使用vtable的语言实现吗?

是否有免费的在线网页来讨论替代方案?

EN

回答 1

Stack Overflow用户

发布于 2011-08-10 16:07:59

是的,有很多选择!

只有当两个条件保持不变时,Vtables才有可能。

  1. 所有方法调用都可以静态地确定。--如果可以按字符串名称调用函数,或者如果没有调用方法的对象的类型信息,则不能使用vtable,因为无法将每个方法映射到某个表中的索引。类似地,如果可以在运行时向类添加函数,则不能静态地为vtable中的所有方法分配索引。
  2. 继承可以静态地确定。如果使用原型继承,或者使用另一种继承方案,如果不能静态地判断继承结构是什么样子,则不能预先计算表中每个方法的索引,也不能预先计算特定类的方法在一个时隙中的位置。

通常,继承是通过一个基于字符串的表将函数的名称映射到它们的实现,以及允许每个类查找其基类的指针来实现的。然后,通过遍历此结构来实现方法分派,寻找实现该方法的接收对象类中或以上的最低类。为了加快执行速度,经常使用内联缓存等技术,其中调用站点根据对象的类型存储应该调用哪种方法的猜测,以避免花费时间遍历整个结构。Self编程语言使用了这种思想,然后将其集成到HotSpot JVM中来处理接口(标准继承仍然使用vtable)。

另一种选择是使用跟踪,编译器发出的代码猜测对象的类型,然后将方法硬编码到跟踪中。Mozilla在其JavaScript解释器中使用这一点,因为没有为每个对象构建vtable的方法。

我刚刚完成了一个编译器课程的教学,我的一个讲座是关于各种编程语言中对象的实现以及相关的权衡。如果您愿意,您可以查看幻灯片这里

希望这能有所帮助!

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7013737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档