我一直在想软件在本机运行是什么意思。这种软件到底是什么?它与非本机运行的软件有何不同?如何判断某个软件是否可以在我的计算机上本机运行?我的计算机上是否可能已经有本机运行的软件?
答案1
如果某个软件被设计为在某个平台上运行,那么该软件就是该平台原生的。
平台通常指操作系统,但它也可以应用于任天堂 Game Boy 等设备。
以 Game Boy 为例,它的软件来自卡带。这些卡带包含运行天生地在 Game Boy 上。
模拟器是允许为一个平台设计的软件在另一个平台上运行的层。例如,有些模拟器可以执行 Game Boy 卡带的映像,并允许您在计算机甚至手机上玩 Game Boy 游戏。
A兼容层有点像模拟器。当 64 位计算机和操作系统成为主流时,它们需要与现有的 32 位技术兼容。由于 64 位和 32 位架构非常不同,因此通常需要一个兼容层才能在 64 位机器上运行 32 位软件。对于 Microsoft Windows 的 64 位版本,Microsoft 需要编写一个兼容层,以便 32 位程序仍可在新的 64 位系统上运行。这就是为什么某些程序通常安装到名为 的文件夹中Program Files (x86)
,其中x86
表示“32 位”。
兼容层往往比模拟器与本机系统更加紧密。 虚拟盒 模仿操作系统的硬件*,它模拟的系统与主机系统没有太多的直接交互。 WoW64是兼容层它可以让 32 位程序以更集成的方式在 64 位 Windows 上运行。WoW64 有助于让程序兼容的而不是模仿将它们置于孤立的环境中。
A翻译库是兼容层的一个组件。每当二进制代码以非本机方式运行时,翻译库都会帮助将外部的非本机调用重定向到系统可以理解的本机调用。为原始 TI-83 编写的汇编程序可能与较新的 TI-83/84 Plus 计算器不兼容,因为在 TI-83 的架构中有意义的一些调用可能在 TI-83/84+ 中不再有效。翻译库(可能包含在以下 shell 中Mirage操作系统) 确保对 TI-83 的调用转到 TI-83/84+ 计算器中新的、更新的位置。
独立于平台的代码用一种语言编写的解释通常是本机运行的程序。例如,PHP 是一种编程语言,由已安装的 PHP 二进制文件解释和执行,该二进制文件已经编译天生地适用于 Windows、Mac 和基于 Unix 的操作系统。Web 脚本编写者编写的 PHP 代码与平台无关,只要安装了 PHP,代码就可以在多个操作系统上运行。
各种各样的
更正
其他
答案2
本机代码通常与平台无关代码相对。如果您运行本机软件,则您正在运行已编译的二进制文件,而不是平台无关脚本(例如 javascript 或 Java 字节码)。编译的 C 或编译的 C++ 是本机代码的典型示例。
答案3
令人惊讶的是,可能有几个答案,但标准通常是:将代码编译为 CPU 的操作码,并针对启动计算机的操作系统的编程库运行。在这种情况下,您运行的大多数代码将是本机代码。也许一些反例会澄清问题。
Java 不是本机代码。它被编译为中间字节码,然后在特定芯片组上运行。Java 可以称呼本机代码。Eclipse 就是一个很好的例子 - 为了提高速度,Java 调用了一些平台本机图形调用。
如果你跑葡萄酒,一个 MS Windows API 模拟器,不是本机代码。虽然您正在执行为该芯片组 (x86) 设计的代码,但您运行的不是启动它的操作系统的代码,而是替换库。 玛梅为不同的 CPU 和操作系统运行二进制文件。
脚本不是本机代码。它们是用高级语言编写的,然后在运行时必须转换为在 CPU 上运行的代码。
有些界限很模糊。你的网络浏览器以本机代码运行,但它也可以运行 Java(编译为字节码)或 Javascript(一种脚本解释语言)。
答案4
说得更抽象一点,这就像是让别人信任你,并执行用不同语言编写的程序。
本机意味着操作系统将使用它所知道的最快、最简单的方言,即二进制。
优点:速度快,语言之间可以互相交流,因为语言是硬件实现的。缺点:安全性、API 复杂、受限于操作系统功能,而且编译器很难制作,因为程序一旦编译完成就会被发布到外界。
非本机,意味着您的代码不会由操作系统直接执行。它可以以多种不同的方式执行,主要方式是解释并在虚拟机中运行程序的字节码版本。
优点:API 几乎一直在变化,因此程序员的工作会更加轻松(至少当他们坚持使用这种特定语言时)。缺点:性能(通常会轻微下降,很少会成为问题),并且并不是每个人都会真正使用这种特定语言,因此采用这种技术也可能是一个问题。安全性也可能是一个问题,但它更容易控制。不知何故。