首页编程语言编程语言计算速度对***析

编程语言计算速度对***析

cysgjjcysgjj时间2024-11-15 07:22:43分类编程语言浏览2
导读:不同编程语言最终生成的机器码是否一样?不同编程语言最终生成的机器码是否一样?这个问题问的很好。同样的程序段在操作系统、CPU位数、编绎设置等一致的情况下,结果是一样的。否则,最终的机器码是不相同的。此处,我们把a,b两个整数相加,送给整数c,在VS运行环境下,我们看一下c=a+b的机器码、汇编、VS编码的结果,如下图:从上面可以看出,……...
  1. 不同编程语言最终生成的机器码是否一样?

不同编程语言最终生成的机器码是否一样

这个问题问的很好。同样的程序段在操作系统、CPU位数、编绎设置等一致的情况下,结果是一样的。否则,最终的机器码是不相同的。

此处,我们把a,b两个整数相加,送给整数c,在VS运行环境下,我们看一下c=a+b的机器码、汇编、VS编码的结果,如下图

从上面可以看出,不论a,b赋值如何,a+

编程语言计算速度对比分析
图片来源网络,侵删)

b一>c的代码只有三行,而且是一致的,每一个变量占据4个字节。mov eax,dword ptr [edp-4],mov eax,dword ptr [edp-8]等,标准的X86系列宏汇编语言。可以用下表查到相应的机器码。

这就说明,在同样的运行环境下a+b一>c的汇编码、机器码是一致的。

不同的编程语言生成的机器码是不会一样的。这里有两个原因:

编程语言计算速度对比分析
(图片来源网络,侵删)
  • CPU的指令集不同导致机器码不同
  • 语言的编译器不同导致机器码不同

每种CPU都有自己的指令集,这些指令集大致包括寄存器操作指令,加法器操作指令等等。每种CPU的寄存器数量和结构都不一样,因此,对应的指令集也不会相同。

每种语言都有不同的编译器。编译器的作用分析程序语法生成语法树,再把CPU指令代入语法树生成机器码。每种编译器生成的语法树都是不一样的。尽管执行结果是等效的,可以做成很多不同的执行顺序。打个比方,您用算盘算1+2的时候,先拨1再拨2跟先拨2再拨1的结果是一样的。

按严格意义上来说是不一样的。

编程语言计算速度对比分析
(图片来源网络,侵删)

你听过条条大路通罗马吗?虽然不同的编程语言最后都要编译成计算机硬件能解码的机器码,但是过程千差万别。

机器的硬件,比如处理器,内核数量,操作系统的位数,等等。都会影响最终生成的机器码。

就像你用M1处理器的MAC跑x86的应用,也要先进行内部的转码才行。

不过这个问题虽然有意思,但是逻辑还是有点不对,相同的机器码不能保证相同的工作环境。效果可能一样,但是过程肯定是有差异的,所以生成的机器码也会不一样。

先给出答案,对于同样一段程序,不同编程语言最终生成的机器码是不一样。

而且,即使是同一编程语言的同一段代码,使用不同的编译器编译出的机器码也很有可能是不一样的,这一点可以分成几种情况来分析。

***如我们有这样一段C代码:

int main(void)

{

int a=1;

int b=2;

int c=0;

c=a+b;

return c;

不一样的。

即便是同样的源代码,用不同版本或者同样的版本的编译器,用不同编译选项生成的代码也是不一样的。

商业版本的编译器的代码一般来说质量更高,免费的就不好说了,看开发人员技术水平啦。

比如,当年的SUN公司的编译器生成的C语言的代码比GNU版本的编译器生成的代码运行速度更快,而且bug更少。一句话,一分钱一分货。

[免责声明]本文来源于网络,不代表本站立场,如转载内容涉及版权等问题,请联系邮箱:83115484@qq.com,我们会予以删除相关文章,保证您的权利。转载请注明出处:http://www.wnpsw.com/post/22481.html

机器码一样编译器
用什么编程语言才能学好英语 军工与互联网技术