0

这个问题对 C# 最为具体,但了解 C/C++ 也会很有趣。我猜,Java 必须使用条件,因为它的动态类型转换/缺乏编译时泛型。

出于性能原因,在可能使用无分支逻辑的地方最好避免分支。因此,为了避免在关键部分中可能出现的情况,知道这一点会很有趣。

4

2 回答 2

0

这个问题是最具体的 C#

不,不是。整个主题被故意排除在 C# 和 CIL 的规范之外。规范在这个问题上没有什么可说的。

您正在询问即时编译器的实现细节。

既然这已经弄清楚了,我可以补充一点,多年来我已经阅读了微软关于如何分析 CIL 以找到可以优化演员表的简单和复杂案例的技术文章。但是,微软在谈到实际实现时并没有详细说明他们的抖动。

因此,您可以做的最好的事情是以优化器将编译它的方式编写一些测试代码,并查看不使用调试器时生成的机器代码。

于 2013-05-12T06:47:11.010 回答
0

向下转换时,答案肯定是肯定的,因为它需要在每个级别都有多个选择的树下走。

向上转换时,这取决于如何完成迭代以向上遍历类型树。在大多数情况下,答案可能是肯定的,但是树上的一些优化(特别是它在内存中的布局)可能允许walk-up 成为无分支操作。

于 2014-08-29T14:33:16.833 回答