gpt4 book ai didi

Java 方法调用比 C++ 中的虚拟方法调用更快?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:14:58 28 4
gpt4 key购买 nike

刚刚在维基百科上偶然发现了这个:

Java can access derived instance methods faster than C++ can access derived virtual methods due to C++'s extra Virtual-Table look-up. However, non-virtual methods in C++ do not suffer from V-Table performance bottlenecks, and thus exhibit performance similar to that of Java.

这是正确的吗?据我所知,所有调用在 Java 中都是虚拟的,并且仍然依赖于虚拟表,所以我的共同逻辑表明 Java 调用不可能比虚拟 C++ 调用更快。

是我误会了还是文章有误?无论如何 - 有没有比虚拟表更快的在运行时解析调用的方法?

最佳答案

这可能与 JIT 编译执行的优化有关。在某些情况下,我可以想象 JVM 检测到某个(虚拟)调用总是引用某个实现并且不需要查找。

OTOH,C++ 编译器也可能能够推断出在某些情况下不需要查找并生成同样好的代码。此外,C++ 不需要虚函数,因此存在 Java 不提供的替代方法。

就是说,如果您需要 virtual 在 C++ 中提供的功能,我想不出通常更好的选择。如果您关心性能,请注意 virtual 通常会产生成本,并且它应该只在需要的地方使用。

总的来说,我发现像你引用的那样的陈述没有帮助和误导(当然不是你的错)。

关于Java 方法调用比 C++ 中的虚拟方法调用更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14919351/

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