[Siehe Bearbeitungsverlauf für eine ganz andere Antwort, die jetzt im Grunde genommen veraltet ist.]
Ja, es gibt einige JIT-Compiler für C und / oder C ++.
CLing basiert auf Clang / LLVM. Es wirkt wie ein Dolmetscher. Das heißt, Sie geben ihm einen Quellcode, geben einen Befehl, damit er ausgeführt wird, und er wird ausgeführt. Der Schwerpunkt liegt dabei in erster Linie auf Komfort und schneller Kompilierung, nicht auf maximaler Optimierung. Obwohl dies technisch gesehen eine Antwort auf die eigentliche Frage ist, entspricht dies nicht wirklich den Absichten des OP.
Eine andere Möglichkeit ist NativeJIT . Das passt etwas anders zur Frage. Insbesondere akzeptiert es keinen C- oder C ++ - Quellcode und kompiliert ihn und führt ihn aus. Es ist vielmehr ein kleiner Compiler, den Sie in Ihr C ++ - Programm kompilieren können. Es akzeptiert einen Ausdruck, der im Grunde genommen als EDSL in Ihrem C ++ - Programm ausgedrückt wird, und generiert daraus tatsächlichen Maschinencode, den Sie dann ausführen können. Dies passt viel besser zu einem Framework, in dem Sie den größten Teil Ihres Programms mit einem normalen Compiler kompilieren können, aber einige Ausdrücke haben, die Sie erst zur Laufzeit kennen und die Sie mit einer Geschwindigkeit ausführen möchten, die sich der optimalen Ausführungsgeschwindigkeit nähert.
Was die offensichtliche Absicht der ursprünglichen Frage angeht, so bleibt meiner Meinung nach der Grundgedanke meiner ursprünglichen Antwort bestehen: Während sich ein JIT-Compiler an Daten anpassen kann , die von einer Ausführung zur nächsten variieren oder sogar dynamisch während einer einzelnen Ausführung variieren, Die Realität ist, dass dies zumindest in der Regel einen relativ geringen Unterschied macht. In den meisten Fällen bedeutet das Ausführen eines Compilers zur Laufzeit, dass Sie auf einiges an Optimierung verzichten müssen. Das Beste, auf das Sie normalerweise hoffen, ist, dass es fast so schnell ist, wie ein herkömmlicher Compiler es produzieren würde.
Obwohl es möglich ist, Situationen zu postulieren, in denen Informationen, die einem JIT-Compiler zur Verfügung stehen, es ermöglichen könnten , wesentlich besseren Code zu generieren als ein herkömmlicher Compiler, scheint dies in der Praxis ziemlich ungewöhnlich zu sein (und in den meisten Fällen, in denen ich dies überprüfen konnte) Dies geschah tatsächlich aufgrund eines Problems im Quellcode (nicht beim statischen Kompilierungsmodell).