静态编译器在优化方面有哪些示例,而JIT无法完成优化的一些C++编译器优化呢?
静态编译器在优化方面有哪些示例,而JIT无法完成优化的一些C++编译器优化呢?
没有。证明:拿任何编译器并将其用作JIT即可。QED。
然而,JIT在执行时间上受到限制,因此不适合进行复杂的优化。
这个答案列出了JIT优化器使用的优化和策略。它们与本地代码优化器所做的并没有根本上的不同。
Jitter中的一个限制是它不能花费大量时间分析代码。每毫秒都会影响程序的响应能力。有两种策略可以帮助解决这个问题。程序集可以通过ngen.exe进行预编译,所有.NET程序集都是这样做的,对于您自己的程序集也最好这样做。只要它们“较大”,可能花费在jitting代码上的时间就比在磁盘上查找和加载.ni.dll文件要少。
Jitter会在方法开始执行之前按需编译代码。这往往会将成本分摊到时间上,与在人类时间运行的代码相关,这时响应能力很重要。
值得注意的一个细节是,Jitter可以利用特定于核心的指令。这是一个基本消失的优势,现在的核心并没有那么不同。但它会在x64操作系统上轻松生成64位代码,而无需进行任何特殊处理。
一个经常提到的数字是,被JIT编译的机器代码效率相当于本地预编译代码的85%。但要注意源代码的质量和性质永远是第一位的。