假如,你为运行Windows 2000 的老式奔腾PC编写了一个很好用的C++程序,而管理人员决定使用不一样操做系统(如Mac OS X 或者 Linux)和处理器(如SPARC处理器)的计算机替换它。该程序代码是否能够在新平台上运行呢?固然,必须使用为新平台设计的C++编译器对程序从新编译后再运行。若是在不修改代码的状况下,从新编译程序后,程序运行良好,则说明程序是可移植的。不然反之。编程
编程语言的可移植性,是指用一种编程语言在一个系统上编写的程序通过不多改动或者不须要修改就能够在其余系统平台上运行。编程语言
要想了解可移植性必需要知道:1.什么是程序?2.什么是系统平台?spa
1. 什么是程序?操作系统
首先,咱们得知道程序的本质是什么?程序的本质就是一连串能被CPU识别并执行的有0、1代码组成的指令即目标代码(由0、1组成的代码)。不一样类型的CPU指令集是不一样的,相同的一段0、1代码Intel CPU能识别,ARM CPU就不能识别产生错误。设计
其次,咱们得知道程序的运行原理是什么?你们都知道程序是运行在操做系统之上的,而你们可能不知道的是:程序要想在操做系统上运行就须要在程序的头部嵌入一段启动代码,此代码至关于程序和操做系统之间的接口。到这里咱们能够清楚的知道:程序 = 目标代码 + 启动代码,二者缺一不可,只有这样程序才能在系统上运行起来。blog
不一样的操做系统,它们的启动代码接口是不一样的。例如,在Intel CPU上运行的XP和Linux的启动代码接口是不一样的,因此同一种程序它们的启动代码多是不一样的。可是由于都是Intel CPU,因此程序的目标代码(0、1代码)是相同的。接口
什么是程序呢?程序 = 目标代码 + 启动代码编译器
2. 什么是系统平台?编译
这里的系统平台是指CPU + 操做系统的组合:如Intel CPU + Windows XP、Intel CPU + Mac Os X、Intel CPU + Linux 这是三个不一样的系统平台,ARM CPU + Linux 与 Intel CPU + Linux 也是不一样的系统平台。原理
为何系统平台是CPU + 操做系统的组合呢?咱们从上面了解到 程序 = 目标代码 + 启动代码。目标代码随着CPU类型的不一样而不一样,启动代码随着操做系统的不一样而不一样。所以,系统平台是CPU + 操做系统。
3. 可移植性的本质
那么目标代码和启动代码是怎么生成的呢?答案是编译器。编程语言编写的程序首先要被编译器编译成目标代码(0、1代码),而后在目标代码的前面插入启动代码,最终生成了一个完整的程序。因此编程语言的可移植性依赖于它们的编译器是否强大,是否在多个平台上都有这种编程语言的编译器。例如,C编译器在大约40种系统上可用,包括从8位微处理器的计算机到Cray超级计算机。
要须要注意的是,程序中为访问特定设备(如显示器等)或者操做系统(如Windows XP 的API)的特殊功能而专门编写的部分一般是不能移植的。
综上所述,一个编程语言的可移植性强不强取决于:1.不一样平台编译器的数量;2.对特殊硬件或操做系统的依赖性。
为了便于理解,附加一张可执行代码的生成逻辑图:
Good Good Study, Day Day Up.
顺序 选择 循环 总结