|
Post by nodi123 on May 3, 2024 23:19:49 GMT -8
要区别是什么? 在某些情况下,需要在与我们用于编程的环境不同的环境中运行软件。为此,我们有几种选择。其中之一是使用能够为目标系统生成有效可执行文件的交叉编译器。另一种最流行的方法是通过模拟器运行软件,该模拟器允许通过软件在另一个环境中重现必要的条件。编译器和模拟器之间的差异使得 根据每种情况和用途使用其中一种更合适。 什么是编译器 编译器是用于将编程语句转换为微处理器可执行的程序的软件。为了执行此任务,编译器分析要编译的程序的所有元素的语法。这项任务可能需要多次传递才能完成分析。其中每个代码都被简化为最基本的元素。此外,还引入了优化以使其执行速度尽可能快。 如果词法分析(也称为语法分析或解析)的结果不正确,则编译将无法完成。相反,将会生成一条错误消息。如果没有发生错误,将导出一个包含处理器可以解释的代码(目标代码)的文件。 但是该代码还不能直接执行。为了完成该过程,链接器必须编译程序的不同部分以及将包含在其中的库。完成此操作后,您必须将它们合并(链接)到目标操作系统的可执行文件中。 如今,像 Java 这样的语言会生成称为字节码的特殊机器代码。这可以在具有必要解释器的不同环境中运行。它是编译语言和解释 哥伦比亚电话号码数据 语言之间的中间点,编译语言通常执行速度更快,解释语言不需要编译,因此更可移植。为了充分发挥这两个系统的优点,JIT(Just In Time)编译器能够将字节码转换为本机代码。这将为其运行的平台做好准备。该过程是在软件第一次运行时执行的,因此在后续使用中执行速度要快得多。 交叉编译 如果需要,可以针对不同于执行编译过程的计算机的体系结构来编译软件。这称为交叉编译,并要求编译它的操作系统具有能够为目标处理器体系结构生成代码的编译器。还有生成编译程序所需的那些库。 当在功能更强大的 PC 上为处理能力较低的系统进行编译时,此过程变得尤为重要。例如,在具有 8 核 i7 处理器和 16GB RAM 的 PC 上编译适用于 ARM 处理器的程序可能需要几分钟。在 Android 设备或 Raspberry Pi 上执行相同的工作可能需要几个小时。 编译器和模拟器之间的差异:何时使用后者 相反的情况提供了其他选择:如果我们需要运行为Android或与我们正在使用的机器不同的处理器或系统编译的程序,则可以使用模拟器。它的工作方式与虚拟机类似,但它不是为虚拟机提供处理器等资源,而是忠实地再现其操作。如果是不同的操作系统,但在同一架构内,建议使用虚拟机。 这有一个明显的优势,这是在不同架构上运行软件的编译器和模拟器之间的区别之一。如果我们只有一个已经编译的版本,我们也可以运行它,甚至可以测试我们正在为另一个架构所做的开发。 显然,权衡是性能。
|
|