当前位置:首页 » 编程软件 » 不同处理器可以编译相同源代码么

不同处理器可以编译相同源代码么

发布时间: 2022-05-07 07:32:53

㈠ 相同的cpu架构,在不同的操作系统下生成的程序为什么不可以通用程序不是机器语言么针对硬件操作的阿

相同的CPU架构只是指程序运行的硬件是相同的,而软件(操作系统、操作系统下生成的程序)是不一样的,最后生成的针对硬件操作的机器语言也不一样。生成的程序最后都要汇编成机器语言才能被运行,而机器语言在同一种架构下都可以用.但不能运行在不同架构的平台下。

㈡ 高级编程语言也要编译成汇编语言,不同的cpu汇编语言不一样,那会编译成那种汇编语言呢

高级语言一般最终不是编译成汇编语言而是机器语言,而像C#这类语言编译后为公共语言,不是机器码,运行时公共语言代码由NET框架负责进一步即时翻译即时执行为机器指令。只有C++这类语言编译后为CPU可以直接执行的机器码。


附图是VS2019中C++语言的一段调试时的反汇编窗口,其中白字是C++源代码,下面是对应的汇编码,汇编行左列为内存地址,中间是对应的机器指令和数据(内存中的实际值),右侧是对应的汇编码。

比如,定义整数变量a并赋值1的语句,被编译器编译成C7 45 F8 01 00 00 00 这样几个字节,其中C7为汇编码中的MOV指令,可以操作16位寄存器和内存以及立即数,45 F8 是当前命名空间中变量地址,即变量a的地址(F845),而01 00 00 00 为32位宽度的数值1(内存排列顺序是前低后高)。也就是说机器语言的指令格式为:指令代码,地址,数据,当然根据不同指令,有时候地址和数据是不需要的。而右侧 MOV dword ptr[a],1 是指令助记符,也就是汇编指令,而用汇编指令编写的程序也是需要编译成机器指令的。


指令C7对应的汇编码及含义

㈢ 同样的程序段在不同的CPU中运行,结果一样不

当然一样,不一样的CPU只是对你机器的状态产生的速度等一些本身的实质问题而已

㈣ 电脑:不同的机器,指令不同,为什么程序能在不同的机器间(cpu不同,是吗)运行,

你理解得不对,不同的机器,如果采用的指令集不同,程序绝对不能兼容(连操作系统本身都要修改,更不用说依赖其运行的程序)。我们一般接触的不同性能的CPU,其实指令集是一样的。即使是指令集相同,如果操作系统不同,程序仍然不能兼容。必须在想要兼容的操作系统环境中(仿真环境下也可)重新编译源代码,生成对应操作系统的程序版本才行。
如果是编译型的程序,也就是脚本类的,它在不同(操作)系统之间的兼容,其实是通过实时编译实现的。

㈤ 请问运行于不同CPU构架的linux,它们的软件可以通用吗

以上回答中jiangtao9999的比较靠谱儿。
是这样:
1、Linux下的软件几乎都是c语言的;
2、如果你学过C语言,找找书应该有这样一个概念:ANSI C,这个是一个C语言的标准,比如printf这个函数就属于标准库(也就是符合ANSI标准的)函数
3、假如你编写了一个软件,代码中仅仅包含ANSI的库函数,那么没有问题,只要是支持C语言的平台,都能正常运行,即:编写了一个简简单单的helloworld到哪里编译运行都没有问题。
【前提是:】编译再运行,不编译就运行是不可以的,比如printf函数在各种架构上的实现方式是不可能相同的,所以需要在arm的编译器上再编译一遍才可以。否则运行不了。
有的软件平台可以不用编译,直接运行,比如jiangtao9999说的java、Python什么的,Java可以实现“一次编译,满哪运行”什么的,而Python则是有了.py源代码就可以无敌了,使用的时候不用你去执行编译命令,直接执行即可。arm上实现这两种语言都是很容易的——下载源代码、编译、安装即可。
4、不同架构的Linux平台都要实现一个编译器,这是很重要的,有了编译器,才可以从源代码安装软件。
5、使用非ANSI库中的函数需要该Linux包含这个函数的实现,否则,编译后的连接将不通过,比如一个软件使用了GTK来实现图形用户界面,那么就需要系统中包含了gtk的库函数,这就叫依赖,安装软件,首先要解决依赖,依赖有时候解决起来很麻烦,所以软件开发过程中尽量减少依赖,这样方便安装。
6、tar.gz这种格式的软件包有可能是源代码,有可能是可执行文件(这是因为那只是一个压缩包,内容是什么不一定),这两者不同。很多软件以tar.gz格式发布源代码,而qq的Linux版本属于可执行文件,在几乎所有Linux平台下面直接双击或者通过命令就可以使用。
7、如果你使用的是rpm包或者deb包或者是tar.gz文件包中可执行文件形式的软件包,而不是tar.gz这种形式的源代码,你需要使用相应的软件包管理器安装就行,
但这不意味着arm版本的deb和x86版本的deb文件是通用的,你能这样用是因为所有的使用x86机器的软件经过编译或者交叉编译(在arm平台上编译x86平台上的软件就叫交叉编译)以后,运行于几乎完全一样的统一的平台上,实现软件和系统的无缝对接,方便了用户——一方面可以不用浪费编译的时间,主要还是方便了那些不会编译软件的人。
8、我也正在学习Linux,所以很多地方不太对,这只是我现在的一些理解。jiangtao9999说的主要是和汇编有关,如果代码的实现主要是在c语言水平,那么就会由编译器屏蔽掉指令集和寄存器什么的。
9、要是在网络回答的答案能改改就好了,这样错误就会少一点。
10、重新罗嗦一遍:
1在不重新编译源代码的情况下,x86下linux的软件不可以运行于arm构架的Linux,即使运行也会奇卡。
2和在编译是否时为X86的CPU构架优化了编译无关。(把我问迷糊了,估计是无关)
3软件在编译时是否为X86的CPU构架而优化主要看作者了,资料可以参看http://www.gentoo.org/doc/zh_cn/gcc-optimization.xml
4和不同的安装包格式有一定关系
5tar.gz格式的软件包不能保证在不同架构的Linux都能运行
6在arm的linux安装时解决依赖以后,乳沟编译通过基本是没什么问题的
7不是所有源代码在arm和x86下编译一下就可以了,还需要做一些努力
8有源代码可以对遇到的不通过的问题逐一解决,理论上可以实现所有软件都能运行
9重新编译过程中如果遇到依赖问题需要逐一解决

㈥ 不同结构的CPU执行相同的程序

只有高级语言才有可能得到相同的结果,汇编和机器码基本是对应的,所以不同的结构结果不一样,因为指令都不同别说结果了,程序都不一定能按要求跑。

㈦ 谁知道为什么c语言程序为何可以在不同CPU上运行,还有,如果一个操作系统如果使用汇编语言开发,除了

因为运行的并不是C语言的代码,而是被编译器编译过的C语言代码,只要编译器设置正确,在不同的CPU上想完成相同的任务,C代码是完全一样的,只就是所谓的代码移植,编译好的C程序是不能移植的,但是相同的代码可以在任何有编译器的环境中编译.
至于操作系统,用汇编写的话,很难让人理解,查错,修改,升级都会比较麻烦,但是性能上,直接用汇编写,如果你的技术够高,肯定会比C的要好.

㈧ linux 下的gcc和windows 下的gcc相同吗gcc的源代码是否相同对同一程序编译出来的可执行文件是否相同

linux下的gcc 和 windows下的gcc,是GNU针对两个不同的平台发行的,两个不同版本的编译器,源代码不完全相同,但大部分地方是相同跨平台的代码。只需要用的时候,configure成相应的平台,它就会编译成相应平台用的gcc。
对于同一个程序,在两个不同的平台下编译出来的可执行文件是不相同的,linux下编译好的helloWorld程序在windows上面是不能运行的。
但是,linux下编译好的helloworld在linux下运行,与windows下编译好的helloworld在windows里运行的效果,是相同的。

㈨ 不同的cpu机器指令相同么

CPU的指令集从主流的体系结构上分为精简指令集和复杂指令集,而在普通的计算机处理器基本上是使用的复杂指令集。在计算机早期的发展过程中,CPU中的指令集是没有划分类型的,而是都将各种程序需要相配合的指令集成到CPU中,但是随着科技的进步,计算机的功能也越来越强大,计算机内部的元件也越来越多,而且越来越复杂,CPU的指令也相应的变得十分复杂,而在使用过程中,并不是每一条指令都要完全被执行,在技术人员的研究过程中发现,约有80%的程序只用到了20%的指令,而一些过于冗余的指令严重影响到了计算机的工作效率,就这一现象,精简指令集的概念就被提了出来。

精简指令集RISC就是(Reced Instruction Set Computing)的缩写,而复杂指令集CISC则是(Complex Instruction Set Computing)的缩写。它们之间的不同之处就在于RISC指令集的指令数目少,而且每条指令采用相同的字节长度,一般长度为4个字节,并且在字边界上对齐,字段位置固定,特别是操作码的位置。而CISC指令集特点就是指令数目多而且复杂,每条指令的长度也不相等。

㈩ 不同cpu的指令集不是不同吗为什么一个程序可以在很多不同的电脑上用

CPU使用的微指令集会有些不同,但这是CPU内部使用的.CPU会把汇编的指令进行相应的转化为机器指令,并把这样的一句指令转化为一系列的微指令在CPU内部完成.所以,相同的程序在不同的CPU上可以得到相同的结果.

热点内容
安徽新能源网络配置是什么 发布:2025-05-14 10:06:24 浏览:630
pinode搭建服务器 发布:2025-05-14 10:04:23 浏览:3
电脑服务器ip名称 发布:2025-05-14 10:01:09 浏览:748
connectorpython 发布:2025-05-14 09:48:50 浏览:762
配置不好怎么办 发布:2025-05-14 09:46:40 浏览:622
数据流程图中的数据存储是指 发布:2025-05-14 09:46:39 浏览:445
我的世界服务器id前缀mod 发布:2025-05-14 09:45:53 浏览:830
完整后台网站源码 发布:2025-05-14 09:45:46 浏览:455
传奇祝福脚本 发布:2025-05-14 09:34:12 浏览:571
电脑文件加密的软件 发布:2025-05-14 09:29:20 浏览:354