用于优化性能的C++虚拟机
A virtual machine for C++ for optimizing performance
支持C#和Java等JITed语言的一个论点是,它们可以更好地执行优化,因为虚拟机的运行时评测可以比C++的静态优化代码更好地优化代码。
然而,我想知道我们是否也可以使用虚拟机在C++或任何类似语言的运行时优化代码。例如,我们可以使用LLVM编译器生成的IR,并制作一个虚拟机来解释、JIT和优化代码,类似于Java和C#的情况。
当然,不会有垃圾收集,但优化因素会存在。有人做过这个吗。这上面有文件和工具吗?这种方法会有多好?
这是一个有缺陷的参数。是的,虚拟机有更多的信息可供使用,但与编译器相比,它们的时间和空间也要少得多。
此外,是的,如果你真的想,你绝对可以这样做。但没有人这样做,所以通常不会发生。至少,不是出于优化的原因,您可以这样做是为了沙箱。
Google的Native Client有一个子项目Portable Native Client,我认为LLVM IR被发送到客户端,而不是x86二进制文件,以便在客户端上进行移植。
从理论上讲,是的,JIT可以用于C++。它可以利用底层体系结构中的一些东西来积极地优化代码。它还带来了使应用程序在运行时加载时间更长的缺点。
当然,不会有垃圾收集,因此开销,但优化因素会存在。有任何人都参与其中。这上面有文件和工具吗?多好这种方法会是吗?
这里有很大的误解。对每个用户定义的类型全面强制GC是主要的开销。这也是Android、iOS和Windows移动设备都转向C/C++用于高性能应用程序的原因之一,尽管最初尝试只使用托管虚拟机。
当然,额外的间接级别意味着GC可以自由地执行压缩内存之类的操作,但优化的C/C++程序从一开始就可以使用压缩内存。这也意味着内存最初会更加碎片化,这对于C++擅长的高性能应用程序(处理大型连续缓冲区的应用程序,例如视频处理、光线跟踪或音频处理)来说是一个性能杀手。
此外,将每个UDT实例变成引用意味着所有东西都在堆上,这有效地将原本只有几个时钟周期的操作变成了数百个。
也就是说,为了深入了解问题的核心,当然,C++代码可以使用JIT构建,但你可能会发现,考虑到人们通常使用C++代码的静态性质,这样做并没有真正令人信服的理由。
- OpenGL 在 VMWare Fusion 版本 10.1.3 上安装的虚拟机 (Ubuntu 16.04) 上崩溃
- 二叉搜索树 - 使用 Linux 在虚拟机中制作删除功能
- QT信号在虚拟机中不连接
- 如何将双精度类型的鼠标移动 x 和 y 从主机传递到 Qemu 中的虚拟机
- SQLITE错误:无法重置虚拟机
- C++如何检测您的应用程序正在运行的虚拟机已成为焦点
- SSE2 矢量化和虚拟机
- 在技术上是否可以创建 Java 虚拟机的映像文件并使用它来更快地启动 Java 应用程序
- LLVM是典型的虚拟机
- Jace:: 虚拟机关机错误
- 两个 C++ 可执行对象之间的实时数据通信,一个是 Windows 和另一个在虚拟机 Ubuntu 中
- 将临时对象保留在寄存器上以避免虚拟机中的额外存储/加载
- Delphi和C++类虚拟机兼容吗
- 对于虚拟机,哪种调度方法更有效
- NDK:0xdeadd00d时虚拟机中止和致命信号 11 (SIGSEGV) 的问题(代码 = 1)
- Qt on Android - C++代码是否在 Dalvik 虚拟机中运行
- modern.ie 从网站中提取虚拟机 JSON 数据
- 如何为虚拟机创建二进制文件
- Qt静态构建在虚拟机(win7 32位)上需要很长时间
- 存储变量的有效方法是什么?(自制虚拟机)