【发布时间】:2018-07-08 19:23:36
【问题描述】:
我最近听到很多人说 JIT 编译生成的代码非常快,甚至比任何静态编译器都快。当涉及到 C++ STL 样式的模板代码时,我很难相信这一点,但这些人(通常来自 C#/Java 背景)坚持认为确实如此。
因此,我的问题是:您可以在运行时而不是在编译时进行哪些类型的优化?
编辑:澄清:我更感兴趣的是那些不可能静态地做的事情,而不是任何一个行业的典型案例。
【问题讨论】:
-
很多变量在起作用。始终要求提供基准和所做的假设。静态生成以在各种相关处理器上运行的代码可能比基于 JIT 可能可用的信息生成的代码运行得更慢。 EG:编译代码以在任何回到 386 的设备上运行,并将其与 JIT 代码进行比较,该代码可以考虑全新 I7 的缓存、预测和其他出色的现代功能。
-
Java 和 C++ 语义不同;即使对于相同的代码生成,您也会发现 Java 严格语义 WRT 数组保证较少可能的别名(不包括 C 中的
restrict)。