[Смотрите историю изменений для совершенно другого ответа, который сейчас в основном устарел.]
Да, есть пара JIT-компиляторов для C и / или C ++.
CLing (как вы можете догадаться из игры) основан на Clang / LLVM. Он действует как переводчик. То есть вы даете ему некоторый исходный код, даете команду для его запуска, и он запускается. Основное внимание здесь уделяется удобству и быстрой компиляции, а не максимальной оптимизации. Таким образом, хотя технически это и есть ответ на сам вопрос, это на самом деле не очень подходит для намерения ОП.
Другая возможность - NativeJIT . Это подходит к вопросу несколько иначе. В частности, он не принимает исходный код C или C ++, а компилирует и выполняет его. Скорее, это небольшой компилятор, который вы можете скомпилировать в вашу C ++ программу. Он принимает выражение, которое в основном выражается как EDSL внутри вашей программы на C ++, и генерирует из этого фактический машинный код, который вы затем можете выполнить. Это намного лучше подходит для фреймворка, в котором вы можете скомпилировать большую часть своей программы с помощью обычного компилятора, но у вас есть несколько выражений, о которых вы не узнаете до времени выполнения, которые вы хотите выполнить с тем, что приближается к оптимальной скорости выполнения.
Что касается очевидной цели первоначального вопроса, я думаю, что основной смысл моего первоначального ответа остается в силе: в то время как JIT-компилятор может адаптироваться к таким вещам, как данные, которые варьируются от одного выполнения к другому или даже динамически изменяются в течение одного выполнения, реальность такова, что это имеет относительно небольшое значение, по крайней мере, как общее правило. В большинстве случаев, запуск компилятора во время выполнения означает, что вам нужно отказаться от некоторой оптимизации, поэтому самое лучшее, на что вы обычно надеетесь, это то, что он близок к скорости, которую может дать обычный компилятор.
Хотя можно постулировать ситуации, когда информация, доступная для JIT-компилятора, могла бы позволить ему генерировать существенно лучший код, чем обычный компилятор, случаи этого на практике кажутся довольно необычными (и в большинстве случаев, когда я был в состоянии проверить это произошло, на самом деле это было связано с проблемой в исходном коде, а не со статической моделью компиляции).