[请参阅编辑历史,以获取现在已经基本过时的完全不同的答案。]
是的,有几个针对C和/或C ++的JIT编译器。
CLing(您可能会从游戏中猜到)基于Clang / LLVM。它就像一个口译员。也就是说,您给它一些源代码,给它一个运行命令,然后它就会运行。这里的重点主要是方便和快速编译,而不是最大程度的优化。因此,尽管从技术上来说是对问题本身的答案,但这并不完全符合OP的意图。
另一种可能性是NativeJIT。这有点不同地适合了这个问题。特别是,它不接受C或C ++源代码,并对其进行编译和执行。而是一个小型编译器,您可以将其编译为C ++程序。它接受一个在C ++程序中基本上表示为EDSL的表达式,并从中生成实际的机器代码,然后可以执行该机器代码。这更适合一个框架,在该框架中,您可以使用普通的编译器来编译大部分程序,但是有一些直到运行时才知道的表达式,您希望以接近最佳执行速度的方式执行这些表达式。
至于原始问题的明显意图,我认为我的原始答案的基本观点仍然存在:尽管JIT编译器可以适应诸如数据在一次执行之间变化,甚至在一次执行过程中动态变化的情况,现实情况是,至少作为一般规则,这几乎没有什么区别。在大多数情况下,在运行时运行编译器意味着您需要放弃很多优化,所以通常您甚至希望获得的最佳效果是,它的速度接近于常规编译器产生的速度。
虽然它可能假设的情况下提供给JIT编译器的信息可能会使其产生比传统的编译器实质上更好的代码,这种情况发生在实际的情况似乎是相当不寻常的(在这里我已经能够验证大多数情况下,它的发生,实际上是由于源代码中的问题,而不是静态编译模型造成的。