如果两者都转换为机器代码,汇编如何比编译语言更快?
我说的是真正编译的语言,它们被翻译成机器代码.不是C#或Java,它们首先被编译为中间语言,然后由软件解释器等编译为本机代码.
在维基百科上,我找到了一些我不确定它是否与此相关的东西.是因为从更高级别的语言翻译会产生额外的机器代码吗?或者我的理解错了吗?
称为汇编程序的实用程序用于将汇编语言语句转换为目标计算机的机器代码.汇编程序从助记语句到机器指令和数据执行或多或少的同构转换(一对一映射).这与高级语言形成对比,在高级语言中,单个语句通常会产生许多机器指令.
Joey.. 25
嗯,确实与你的问题有点关系.关键是编译器有时会出于各种原因生成低效的机器代码,例如无法完全分析代码,插入自动范围检查,自动检查对象null
等.
另一方面,如果你手工编写汇编程序代码并知道你在做什么,那么你可能会编写一些比编译器更有效的东西,虽然编译器的行为可能会被调整,你通常可以告诉它不要做范围例如,检查.
然而,大多数人不会编写比编译器更好的汇编程序代码,因为编译器是由那些知道很多非常奇怪但非常酷的优化的人编写的.循环展开之类的东西通常也很难自己编写,并且在许多情况下使得生成的代码更快.
虽然计算机执行的所有内容通常都是机器代码,但运行的代码根据您在机器和程序员之间放置的抽象级别而有很大差异.对于Assembler而言,对于Java来说,还有一些......
此外,许多人错误地认为在较高抽象层的某些优化会在较低的抽象层上获得回报.情况不一定如此,编译器可能无法理解您要执行的操作并且无法正确优化它.
嗯,确实与你的问题有点关系.关键是编译器有时会出于各种原因生成低效的机器代码,例如无法完全分析代码,插入自动范围检查,自动检查对象null
等.
另一方面,如果你手工编写汇编程序代码并知道你在做什么,那么你可能会编写一些比编译器更有效的东西,虽然编译器的行为可能会被调整,你通常可以告诉它不要做范围例如,检查.
然而,大多数人不会编写比编译器更好的汇编程序代码,因为编译器是由那些知道很多非常奇怪但非常酷的优化的人编写的.循环展开之类的东西通常也很难自己编写,并且在许多情况下使得生成的代码更快.
虽然计算机执行的所有内容通常都是机器代码,但运行的代码根据您在机器和程序员之间放置的抽象级别而有很大差异.对于Assembler而言,对于Java来说,还有一些......
此外,许多人错误地认为在较高抽象层的某些优化会在较低的抽象层上获得回报.情况不一定如此,编译器可能无法理解您要执行的操作并且无法正确优化它.
大会有时可能会比编译型语言更快,如果一个汇编编程比编译器生成的写更好的装配.
编译语言通常比汇编语言更快,因为编写编译器的程序员通常比常规程序员更了解CPU架构.