类型转换是否在内部使用条件?(C / c++, c#)
本文关键字:c++ 在内部 是否 条件 类型转换 | 更新日期: 2023-09-27 18:13:12
这个问题主要针对c#,但如果了解C/c++也会很有趣。我猜,Java必须使用条件,因为它的动态类型转换/缺乏编译时泛型。
出于性能原因,在可能使用无分支逻辑的地方最好避免使用分支。所以我很想知道,为了避免在临界区出现
这个问题主要针对c#
不,它不是。c#和CIL的规范中有意遗漏了整个主题。说明书上没有提到这个问题。
你问的是即时编译器的实现细节。
现在已经澄清了这一点,我可以补充说,我已经阅读了微软多年来关于如何分析CIL以找到允许优化强制转换的简单和复杂案例的技术文章。然而,当微软谈论他们的抖动的实际实现时,他们并没有详细说明。
所以你能做的最好的事情就是以一种优化器将编译它的方式编写一些测试,并查看在不使用调试器时生成的机器码。
当向下转换时,答案肯定是肯定的,因为它需要沿着树向下走,在每个级别都有多个选择。
当进行上转换时,它取决于如何进行迭代以遍历类型树。在大多数情况下,答案可能是肯定的,但是对树的一些优化(特别是它在内存中的布局)可能允许向上走是一个无分支操作。