performance - 为什么有些编程语言比其他语言快?

标签 performance compiler-construction assembly theory

我知道 ASM 基本上是最快的,但是是什么让 HLL 比抽象的 ASM 慢?我所说的抽象的意思是,例如在 C++ 中,你有一个类,需要存储关于类中存储的内容、派生的内容、私有(private)/公共(public)访问器和其他内容的数据。编译此代码时,是否有实际的汇编代码可以找出有关该类的信息?就像 CPython 是基于 C 构建的,因此在运行时运行的抽象和指令比 C 还要多。我所说的是否属实?我想我已经回答了自己的问题,但我想从比我自己更有经验的人那里得到答案。

编辑:我知道 Python 是被解释的,但如果它被编译,它是否仍然比 C 慢?

最佳答案

这是一个广泛的问题。

从根本上说,编译语言就像 ASM 一样被翻译成机器指令(操作码)(ASM 也是一个抽象层)。一个好的编译器实际上可能胜过普通 ASM 编码器的结果,因为它可以检查大量代码并应用大多数程序员无法手动完成的优化规则(为优化执行排序指令等)。

在这方面,所有编译语言都是“平等”的。然而,有些人比其他人更平等。编译后的代码执行的好坏从根本上取决于编译器的好坏,而更少取决于特定的语言。某些功能(例如虚拟方法)会导致性能损失(上次我检查虚拟方法是使用函数指针表实现的,尽管我的知识可能在这里过时)。

解释性语言在程序执行时从根本上检查人类可读的语言,本质上需要在程序运行期间等效于编译和执行阶段。因此,它们几乎总是比已编译的对应物要慢一些。智能实现将在执行时逐步解释部分代码(以避免解释从未命中的分支),并缓存结果,以便给定部分代码只解释一次。

还有一个中间地带,将人类可读的语言翻译成伪代码(有时称为 P 代码或字节代码)。这样做的目的是获得代码的紧凑表示,可以快速解释,但可以跨许多操作系统移植(您仍然需要一个程序来解释每个平台上的 P 代码)。 Java 属于这一类。

关于performance - 为什么有些编程语言比其他语言快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6618611/

相关文章:

java - 检查两个整数是否在 0 的同一侧的最快方法

php - do-while 是 php 中最快的循环吗?

python - 如何从内存中执行机器语言?

assembly - 汇编程序 - 跳过指令

arrays - "no such instruction error"组装数组时声明:

performance - 高效的文件I/O和字符串到浮点的转换

java - 如何查看Java进程中所有线程的所有上下文切换的总和?

c - 编译器语法中if then else的翻译

java - 编译器是否删除了不必要的括号

c - 如何使用 LKM Hook 中断门