我最近惊讶地发现 Java 代码被自动重新编译并注入到正在运行的程序中。由于现代 C++ 编译器(例如基于 LLVM 的)开始研究 JIT 编译,我想知道是否有关于此主题的任何工作。
更新: “热重新编译”是指编辑代码,重新编译可执行文件的特定部分并运行它,而无需重新启动程序。常见的用例是具有无限循环的游戏引擎,您可以在渲染步骤中编辑一些代码,并查看下一帧的更改。
C++热重编译的研究现状如何?有有效的实施吗?
这可以在 Java 中完成,因为源代码和实际机器指令之间有一个单独的明确定义的中间阶段。这将使其能够在运行时替换中间代码,从而可能提高性能。在 C++ 中,程序直接构建到特定架构的机器语言中,并且在大多数硬件上,出于各种原因(包括防止意外和恶意代码更改),代码页是只读的。
现在,你在 C++ 中可以做的就是使用 Clang 库之类的东西将代码段重建为共享对象,然后使用
dlopen
相信 g++/gprof 有一种模式,可以使用分析数据来影响 g++ 的优化,但是,也许这就是您正在寻找的?