eda*_*els 5 theory compiler-construction performance assembly
我知道ASM基本上是最快的,但是HLL比抽象的ASM慢吗?抽象的意思是,例如在C++中你有一个类,需要存储关于类中存储的内容,它来自什么,私有/公共访问器和其他东西的数据.编译此代码时,是否有实际的汇编代码可以确定有关该类的信息?就像CPython是基于C构建的那样,在运行时运行时比C更多的抽象和指令.我说的是什么?我想我已经回答了我自己的问题,但我希望得到一个比我更有经验的人的回答.
编辑:我理解Python被解释但如果编译它不会比C慢吗?
这是一个广泛的问题.
从根本上说,编译语言就像ASM一样被翻译成机器指令(操作码)(ASM也是一个抽象层).一个好的编译器实际上可能超出平均ASM编码器的结果,因为它可以检查大量代码并应用大多数程序员无法手动完成的优化规则(订购最佳执行指令等).
在这方面,所有编译语言都是"平等的".但是,有些人比其他人更平等.编译代码的执行情况从根本上取决于编译器的优异程度,更不用说特定语言了.某些功能(如虚拟方法)会导致性能下降(上次我检查虚拟方法是使用函数指针表实现的,尽管我的知识可能已在此处注明日期).
解释语言在程序执行时从根本上检查人类可读的语言,基本上需要在程序运行时期间等同于编译和执行阶段.因此,它们几乎总是比编译的对应物慢一些.智能实现将递增地解释执行的代码部分(以避免解释从未命中的分支),并缓存结果,以便给定的代码部分仅被解释一次.
还有一个中间立场,其中人类可读的语言被翻译成伪代码(有时称为P代码或字节代码).这样做的目的是使代码的紧凑表示能够快速解释,并且可以在许多操作系统中移植(您仍然需要一个程序来解释每个平台上的P代码).Java属于这一类.