编程语言计算速度对***析
不同编程语言最终生成的机器码是否一样?
这个问题问的很好。同样的程序段在操作系统、CPU位数、编绎设置等一致的情况下,结果是一样的。否则,最终的机器码是不相同的。
此处,我们把a,b两个整数相加,送给整数c,在VS运行环境下,我们看一下c=a+b的机器码、汇编、VS编码的结果,如下图:
b一>c的代码只有三行,而且是一致的,每一个变量占据4个字节。mov eax,dword ptr [edp-4],mov eax,dword ptr [edp-8]等,标准的X86系列宏汇编语言。可以用下表查到相应的机器码。
这就说明,在同样的运行环境下a+b一>c的汇编码、机器码是一致的。
每种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