用于优化性能的C++虚拟机

Met*_*est 5 c# c++ java jit llvm

支持C#和Java等JITed语言的一个论点是它们可以更好地执行优化,因为虚拟机的运行时分析可以比静态优化的C++代码更好地优化代码.

但是,我想知道我们是否也可以使用虚拟机在运行时为C++优化代码,或者更确切地说是任何类似的语言.例如,我们可以使用LLVM编译器生成的IR,并创建一个解释,JIT和优化代码的虚拟机,就像Java和C#一样.

当然,没有垃圾收集,但优化因素就在那里.有没有人为此工作过.这有什么论文,工具吗?这种方法有多好?

Pup*_*ppy 7

这是一个有缺陷的论点.是的,虚拟机可以使用更多信息 - 但与编译器相比,它们的时间和空间也大大减少.

此外,是的,如果你真的想,你绝对可以做到.但没有人这样做,所以通常不会发生.至少,不是出于优化原因,您可以将其用于沙盒.


sti*_*472 2

理论上来说,是的,可以为C++制作JIT。它可以利用底层架构中的某些功能来积极优化代码。它还具有使应用程序在运行时加载时间更长的缺点。

当然,不会有垃圾收集,因此不会产生由此产生的开销,但优化因素是存在的。有没有人做过这方面的工作。有这方面的论文、工具吗?这种方法有多好?

这里有很大的误解。对每个用户定义的类型全面实施 GC 是主要开销。这是 Android、iOS 和 Windows mobile 都转向 C/C++ 来实现高性能应用程序的原因之一,尽管最初尝试仅使用托管虚拟机。

当然,额外的间接级别意味着 GC 可以自由地执行压缩内存等操作,但优化的 C/C++ 程序从一开始就已经在使用压缩内存了。这也意味着内存最初更加碎片化,这对于 C++ 擅长的高性能应用程序(处理大型连续缓冲区的应用程序,例如视频处理、光线跟踪或音频)来说是一个性能杀手。加工)。

此外,将每个 UDT 实例转换为引用意味着所有内容都在堆上,这有效地将原本几个时钟周期的操作变成了数百个时钟周期。

也就是说,为了解决你的问题的核心,当然,C++ 代码可以使用 JIT 构建,但你可能会发现,考虑到人们通常使用的静态性质等因素,并没有真正令人信服的理由这样做。 C++ 代码。