低级语言和汇编级语言依赖于机器。我的问题是它是什么意思?我的意思是,它取决于处理器或机器的功能,如RAM,时钟等。
高级语言是如何克服这个问题的呢?
发布于 2010-08-07 14:56:11
在最深的层次上,这意味着指令集不同。将特定的位序列放入x86处理器会得到与将相同的位集放入ARM处理器完全不同的结果。
高级语言“克服”了这一点,因为计算机都做着几乎相同的事情,只是方式不同而已。ARM可以像x86一样将两个数字相加,也可以像x86那样将数据从内存加载到寄存器(反之亦然),等等。
所有高级构造最终都可以简化为所有通用机器都可以执行的一组基本操作(尽管某些构造在某些CPU上可能比在其他CPU上更有效)。
这就是编译器所做的事情。它们解析高级语言,并以某种方式将其简化为目标系统的机器语言。对于新的CPU,通常只需要重新编写编译器的选择位。一些编译器(GCC就是一个很好的例子)构建在层中,极大地简化了这项工作。一个熟悉编译器和目标平台的高技能开发人员就可以相当容易地生成一个基本的移植。
当然,在简单地将结构简化为本机语言的层次上,还存在输入/输出、文件系统访问等问题。这些通常也是在层中处理的,通常只有最低层--驱动程序--为新的平台重写,从而维护到上层的一致接口。
甚至驱动程序通常也可以在不同类型的机器之间共享,全部或部分共享!例如,x86平台并不是唯一拥有PCI总线的平台。即使在总线不同的地方,连接到它们的设备通常最终也是相同的。Linux在几种机器类型之间共享许多设备驱动程序,几乎没有变化。编译器处理翻译为机器码的细节,内核的更多内部层试图抽象出它们可以实现的其他行为差异,驱动程序编写器只需坚持已建立的接口。
在此之后,您就会遇到这样的问题:在给定的平台内,是否有特定的系统具有特定的可选设备(或设备类别)。例如,对于大多数服务器来说,使用3D加速器是很愚蠢的。有些系统可能有硬件随机数生成器,有些可能没有。有些可能没有固定的存储空间。然而,不合格的“机器依赖”通常不会解决这种程度的依赖。
发布于 2010-08-07 14:20:05
机器依赖意味着,从根本上说,依赖于组成计算机的硬件-内存可以通过CPU+RAM总线访问,因此不一定是其中的一部分-无论显卡、外部存储、鼠标/键盘等是什么。
这是通过使用具有公共接口的驱动程序抽象硬件的复杂性来解决的-例如,DirectX通过提供定义良好的接口抽象出与视频卡的交互。
https://stackoverflow.com/questions/3430736
复制