java - 以不可移植语言(即 C/C++)编写的程序的可移植性

标签 java c installation portability

<分区>

为什么许多流行的程序(例如 Microsoft Office)是用 C、C++ 和汇编等语言编写的,但同一个安装程序如何在任何具有适当操作系统的计算机上运行?是因为安装程序实际上是在计算机上编译源代码吗?是因为 AMD 和 Intel 共享基本相同的指令集吗?

我听说 C 是可移植的,但在什么意义上 Java 比 C 更可移植?那么虚拟机的意义何在?

最佳答案

  1. C 或 C++ 没有任何固有的不可移植性。可移植性问题仅在调用操作系统或特定于编译器的函数时出现。在汇编语言编程的情况下,缺乏可移植性通常是由于指令集问题。如果适本地限制目标机器集,那些可移植性问题可能会或不会很重要。
  2. “适当的操作系统”暗示可移植性(严格意义上)不是问题,因为存在定义明确的执行环境。也就是说,提供的二进制文件只能在运行 Windows 的英特尔 ISA 机器上运行。
  3. 安装程序几乎肯定不会为计算机编译源代码。
  4. 是的,由于共享指令集(在这种情况下是操作系统),程序应该在两者上运行得同样好。如果您尝试在具有不同体系结构(例如 ARM)或不同操作系统(可能是 Linux)的计算机上运行该二进制文件,那么您会很不幸。
  5. Java 提供了一堆 API 和一个虚拟机,可以(有时)允许代码编译一次,然后部署到多个体系结构和操作系统上。因为它们通过 Java API 抽象出系统接口(interface),所以当您想要部署到不同的系统时,您不必担心移植所有这些代码。 C 仅提供一些标准库,但未指定特定的机器体系结构。
  6. 虚拟机的要点正是这种抽象——您编写的不是编译成在主机处理器指令集中本地运行的代码的程序,而是编写一个编译成在虚拟机中运行的代码的程序。 VM 的实现者负责从 VM 指令到 native 主机指令的必要翻译以及结果的翻译。

关于java - 以不可移植语言(即 C/C++)编写的程序的可移植性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14571505/

相关文章:

c++ - 如何在Dev C++中使用Eigen库?

java正则表达式字符串匹配和多行用新行分隔

java - Hashmap单键持有一个类。计算 key 并检索计数器

c - 是什么导致我的二十一点程序在执行任何操作之前崩溃?

编译器设计 - 为具有多个操作数的表达式生成代码

python - "unresolved external symbol"- 在 Windows 上将 Cython 扩展链接到 C 库时出错

Powershell:如何安装 cmdlet?

php - 我如何为网站创建安装程序。 PHP 数据库

java - 在 Spring REST Controller 中使用 Pageable 防止多个排序参数

java - 在 gui Java 中对 if 语句的输出显示添加延迟