用非可移植语言编写的程序的可移植性,即C/C++

Cel*_*tas 0 c java installer portability

许多流行程序(如Microsoft Office)是如何用C,C++和汇编语言编写的,但是相同的安装程序可以在任何具有相应操作系统的计算机上运行?是因为安装程序实际编译了计算机上的源代码吗?是因为AMD和英特尔共享基本相同的指令集?

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

Car*_*rum 6

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

  • C和C++(小心使用时)可以在源代码级别的各种计算机体系结构中移植; Java可以在二进制级别的各种计算机体系结构中移植,因为它依赖于这种额外的抽象级别,即Java虚拟机(JVM).JVM本身是用C语言编写的,其源代码可以在许多计算机体系结构下编译.想到这一点的一种方法是从"原始"硬件向更多可移植性发展:机器语言 - >宏汇编程序 - > C - > C++ - > Java. (3认同)
  • @Celeritas,如果安装程序仅用于在具有相同体系结构和操作系统的计算机上运行(通常是这种情况). (3认同)