什么叫程序的可移植性?

时间:2023-01-09 22:00:30
看好多书都说c语言可移植性好,究竟什么是程序或者操作系统的可移植性?
最好举个例子说明一下

15 个解决方案

#1


我的理解在这种机子上能用,但是换个硬件或者软件环境就不能用,或者不是很好用,就是可移植性不好了!汇编就不好!不知道我说的对不?

#2


机器只识别0和1,不管是用什么语言写的程序最终都是0和1的串,说某种语言的移植性好是说在各种型号的机器上有能够把以这种语言写的源程序编译成机器码的编译器。

#3


由于汇编语言与机器指令的一一对应关系,专注于细节,对不同指令集的cpu(以及指令级不兼容)所有的汇编编译器一般不能够把其它指令集的汇编源代码编成本指令集的机器码,因此汇编语言的移植不好。但是高级语言就不一样了。高级语言把实现某种功能的指令集合整合为一个高级语言语句,再加上高级语言有其规范的基本语句结构,使得高级语言的动作实现不是与机器指令一一对应,而是相当于一个描述.对于不同指令集的cpu上的编译器,它们可以根据这种“描述”来“翻译”成本指令集的机器码,因此高级语言的移用性好。
    Do you 明白?

#4


应该是语言越高级,移植性越好,是不是可以这样理解。他的移植是靠编译工具来实现的。
比如说c语言,他的某个cpu下,可由这个处理器上对应的编译工具来编译成相应c描述的机器代码,到了另一个cpu下,又可有相应的编译工具编译成所能用的机器代码。在这其中,c语言只起到了给编译器描述的作用,对吗?
其实cpu只认识自己规定的机器代码,编译工具在cpu机器代码和高级语言之间起了个中间作用,对吗?
如果我要写个编译工具,我是不是必须知道我编译成的机器代码要运行在哪中cpu下,对不对?
编译工具也决定了我的程序是16位的还是32位的,对吗?
那么操作系统呢?他在这其中扮演了什么样的角色?是不是假如我要写个编译工具,因为编译工具也是软件,我也的考虑他是运行在什么样的环境下,呵呵!好象有些明白了。

你(fanxero(方舟二号) )可以留下你的联系方式?或者加qq:122162263

#5


我还有一个疑惑,举个例子吧!
dos下的exe文件格式和win32下的exe文件格式一样吗?假如不一样的话,我在dos下用tc写的一个exe文件,在win32下运行时,怎么转换格式?
如果一样的话,是不是dos下的软件是在win32下的虚拟的一个环境(虚拟的dos)下运行的?

#6


KAO,有那么复杂吗
如果你在Windows/DOS环境下写一个汇编程序
那么它在LINUX/UNIX下肯定跑不起来
因为他们底层的接口都是不一样的
你想想LINUX哪来的INT 21h啊

但如果你用标准C写的程序
一般能在DOS/Win/Linux下跑起来
因为一个printf在不同的系统下是调用不同的中断来进行处理的
就这具有可移植性了

#7


当然有,我还没描述半加器全加器触发器电子的转迁以及电流的磁效应,还要用牛顿第二定理、质能方程和微积分相关知识证明一些东西,是不是需要用到量子论的一些观点?嗯,我得考虑一下,要是讨论到光子、量子计算机那就要用了...
要是讲非线性变...以及多元...哦,那不是我的方向了,不说了

#8


在这台机上用一种编译器能编译通过的程序并能运行的!但在另一台机另一种编译器上能不能编译通过能不能运行,这就要看程序的可移植性了!

#9


搞什么啊,我昨晚发的贴子今天就没了?我自己都还看到了,版什么啊................

#10


楼上此言极是,我遇到过这种情况

#11


我们知道通常情况下我们使用的程序都是在特定的环境中才能运行,离开了支持环境程序就不能运行。可移性是指程序的适用性比较广应用范围比较多。

#12


理论上是一回事,实际又是另一回事,多年以来,没有什么真正可移植的东西,先不要指望了吧。

#13


可移植性是指C本身与特定机器无关,这也是为什么C没有自己的I/O语句的缘故.
C还不支持很多特性,多线程,多道程序设计等等,这都有助于构件一种独立于机器的语言.
再配上ansi的标准,所以它写的程序几乎可以不用修改就能运行在大多数机子上.

#14


其实主要在于编译器

#15


可移植性指的是源代码的可移植

#1


我的理解在这种机子上能用,但是换个硬件或者软件环境就不能用,或者不是很好用,就是可移植性不好了!汇编就不好!不知道我说的对不?

#2


机器只识别0和1,不管是用什么语言写的程序最终都是0和1的串,说某种语言的移植性好是说在各种型号的机器上有能够把以这种语言写的源程序编译成机器码的编译器。

#3


由于汇编语言与机器指令的一一对应关系,专注于细节,对不同指令集的cpu(以及指令级不兼容)所有的汇编编译器一般不能够把其它指令集的汇编源代码编成本指令集的机器码,因此汇编语言的移植不好。但是高级语言就不一样了。高级语言把实现某种功能的指令集合整合为一个高级语言语句,再加上高级语言有其规范的基本语句结构,使得高级语言的动作实现不是与机器指令一一对应,而是相当于一个描述.对于不同指令集的cpu上的编译器,它们可以根据这种“描述”来“翻译”成本指令集的机器码,因此高级语言的移用性好。
    Do you 明白?

#4


应该是语言越高级,移植性越好,是不是可以这样理解。他的移植是靠编译工具来实现的。
比如说c语言,他的某个cpu下,可由这个处理器上对应的编译工具来编译成相应c描述的机器代码,到了另一个cpu下,又可有相应的编译工具编译成所能用的机器代码。在这其中,c语言只起到了给编译器描述的作用,对吗?
其实cpu只认识自己规定的机器代码,编译工具在cpu机器代码和高级语言之间起了个中间作用,对吗?
如果我要写个编译工具,我是不是必须知道我编译成的机器代码要运行在哪中cpu下,对不对?
编译工具也决定了我的程序是16位的还是32位的,对吗?
那么操作系统呢?他在这其中扮演了什么样的角色?是不是假如我要写个编译工具,因为编译工具也是软件,我也的考虑他是运行在什么样的环境下,呵呵!好象有些明白了。

你(fanxero(方舟二号) )可以留下你的联系方式?或者加qq:122162263

#5


我还有一个疑惑,举个例子吧!
dos下的exe文件格式和win32下的exe文件格式一样吗?假如不一样的话,我在dos下用tc写的一个exe文件,在win32下运行时,怎么转换格式?
如果一样的话,是不是dos下的软件是在win32下的虚拟的一个环境(虚拟的dos)下运行的?

#6


KAO,有那么复杂吗
如果你在Windows/DOS环境下写一个汇编程序
那么它在LINUX/UNIX下肯定跑不起来
因为他们底层的接口都是不一样的
你想想LINUX哪来的INT 21h啊

但如果你用标准C写的程序
一般能在DOS/Win/Linux下跑起来
因为一个printf在不同的系统下是调用不同的中断来进行处理的
就这具有可移植性了

#7


当然有,我还没描述半加器全加器触发器电子的转迁以及电流的磁效应,还要用牛顿第二定理、质能方程和微积分相关知识证明一些东西,是不是需要用到量子论的一些观点?嗯,我得考虑一下,要是讨论到光子、量子计算机那就要用了...
要是讲非线性变...以及多元...哦,那不是我的方向了,不说了

#8


在这台机上用一种编译器能编译通过的程序并能运行的!但在另一台机另一种编译器上能不能编译通过能不能运行,这就要看程序的可移植性了!

#9


搞什么啊,我昨晚发的贴子今天就没了?我自己都还看到了,版什么啊................

#10


楼上此言极是,我遇到过这种情况

#11


我们知道通常情况下我们使用的程序都是在特定的环境中才能运行,离开了支持环境程序就不能运行。可移性是指程序的适用性比较广应用范围比较多。

#12


理论上是一回事,实际又是另一回事,多年以来,没有什么真正可移植的东西,先不要指望了吧。

#13


可移植性是指C本身与特定机器无关,这也是为什么C没有自己的I/O语句的缘故.
C还不支持很多特性,多线程,多道程序设计等等,这都有助于构件一种独立于机器的语言.
再配上ansi的标准,所以它写的程序几乎可以不用修改就能运行在大多数机子上.

#14


其实主要在于编译器

#15


可移植性指的是源代码的可移植