社区首页 >问答首页 >为什么一些编程语言比其他编程语言更快?

为什么一些编程语言比其他编程语言更快?
EN

Stack Overflow用户
提问于 2011-07-08 00:14:36
回答 4查看 2K关注 0票数 5

我知道ASM基本上是最快的,但是是什么让HLLs比ASM更慢呢?我所说的抽象是指,例如在C++中,你有一个类,数据需要存储在类中存储的内容,它派生的内容,私有/公共访问器,以及其他东西。在编译这段代码时,是否有实际的汇编代码可以计算出有关类的信息?就像CPython是建立在C之上的,所以在运行时比C有更多的抽象和指令要运行,我所说的是真的吗?我想我已经回答了我自己的问题,但我希望得到一个比我更有经验的人的答案。

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-08 00:27:20

这是一个宽泛的问题。

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

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

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

还有一种折衷方法,人类可读的语言被翻译成伪代码(有时称为P-code或字节码)。这样做的目的是为了对代码进行紧凑的表示,既可以快速解释,又可以跨多种操作系统移植(您仍然需要一个程序来解释每个平台上的P-code )。Java就属于这一类。

票数 5
EN

Stack Overflow用户

发布于 2011-07-08 00:20:27

实际上,你的前提不一定是真的。

许多人会说,一个好的优化编译器可以胜过手工编写的汇编。

其他人可能会说,像Java和.Net这样的即时编译器可以利用运行时启发式,因此性能优于任何静态编译的代码。

在编译器和解释器中,我向您保证,语言的级别有多高与运行时效率之间不一定存在任何关联。非常高级的语言可以产生非常高效的代码。

我的..。

票数 2
EN

Stack Overflow用户

发布于 2011-07-08 00:23:12

根据经验,语言越抽象(通常对程序员来说越方便),它就会越慢。C编译器将生成汇编代码,这就是它如此依赖于系统的原因。像Java这样的语言在虚拟机中运行,而虚拟机本身就是一个经过编译的程序。但这种抽象通常会减慢速度。

但这并不是说没有例外。正如paulsm4所说,高级语言最终可能比低级语言更有效,因为它们可以利用各种模式(我不知道细节)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6618611

复制
相关文章
在Python中进行运行时类型检查
Python 是一门动态类型语言,没有编译器对变量类型正确性的检查与保证,这也意味着经常需要在运行时对变量的类型进行校验,尤其是在后端接口开发中,毕竟前端传入的数据往往是不可控的。
杜逸先
2023/05/12
7470
PHP脚本运行时间:
作者:陈业贵 华为云享专家 51cto(专家博主 明日之星 TOP红人) 阿里云专家博主 文章目录 代码: 效果: ---- 代码: <style> body{ background:#ccc;
贵哥的编程之路
2022/09/23
1.5K0
PHP脚本运行时间:
运行命令出现错误 /bin/bash^M: bad interpreter: No such file or directory
-bash: ./build.sh: /bin/bash^M: bad interpreter: No such file or directory
HoneyMoose
2023/08/28
7140
运行命令出现错误 /bin/bash^M: bad interpreter: No such file or directory
AQS中的cancelAcquire何时会运行
哈喽,我是子牙。十余年技术生涯,一路披荆斩棘从技术小白到技术总监到JVM专家到创业。技术栈如汇编、C语言、C++、Windows内核、Linux内核。特别喜欢研究虚拟机底层实现,对JVM有深入研究。分享的文章偏硬核,很硬的那种。
子牙老师
2022/05/11
4960
AQS中的cancelAcquire何时会运行
Archiva 运行时提示 JAXBException 错误
你可以尝试使用 Archiva 自己进行编译,或者部署到 1.8 的 JDK 版本上,或者等到 Archiva 3.0 的版本后再开始用吧。
HoneyMoose
2022/06/14
6050
Archiva 运行时提示 JAXBException 错误
cmake:在Makefile中运行ant脚本
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/51832822
10km
2019/05/25
1.7K0
ReactNative_在终端terminal运行程序经常出现的问题
1、Unable to resolve modules lodash  (这里举例lodash,这个lodash也可以是别的。意思就是缺少当前模块,所以需要安装)
mikimo
2022/07/20
7260
检查高 CPU 进程在 Linux 上运行时间的脚本
给 long-running-cpu-proc.sh 设置可执行的 Linux 文件权限。
用户4988085
2021/09/15
2.1K0
解决"QWindowsContext: OleInitialize() failed"运行时错误
OleInitialize是一个Windows API函数。它的作用是在当前单元(apartment)初始化组件对象模型(COM)库,应用程序必须在调用COM库函数之前初始化COM库。每个线程不能初始化多次。
Qt君
2019/11/04
2.7K0
tensorflow gpu 运行出现OOM错误
0 问题 今天跑了一下程序,报了如下的OOM错误 ResourceExhaustedError: OOM when allocating tensor with shape[258000,768] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc [[{{node rpn_model/rpn_conv_shared/convolution}} = Conv2D[T=DT_FLOAT,
莫斯
2020/09/09
5.6K0
什么是编译错误,运行时错误及逻辑错误?
程序的错误主要分成三种: 编译链接错误(语法错误); 编译链接错误又分成编译错和链接错。 编译错就是普通意义上的语法错,编译器进行语法检查不通过,也就是程序违背了计算机语言的语法,例如:括号不匹配、变量名拼写错误、用保留字定义变量名等; 链接错是指程序通过了语法检查,但是无法生成可执行文件,最常见的是链接找不到lib库。初学者有时写了函数的声明,但是缺少函数的定义,此时就会出现链接错。 运行错误; 运行错是程序可以执行,但是在执行过程中发生异常,提前退出程序。最常见的是指针越界,打开文件失败
用户1148881
2018/01/16
9.4K0
Python 运行时遇到的这些错误
对于刚入门的Python新手,在学习过程中运行代码是或多或少会遇到一些错误,刚开始可能看起来比较费劲。随着代码量的积累,熟能生巧当遇到一些运行时错误时能够很快的定位问题原题。下面整理了在Python运行中常见的错误,希望能够帮助到大家。
小小科
2020/07/15
1K0
解决Clion中多个cpp文件运行时出现multiple definition of `main'
在最初使用Clion这款软件做C++开发时,有时会遇到在同一个Project中有多个cpp文件,而每个cpp文件又都有main函数,因此运行时会出现multiple definition of `main'这样的错误。
志颖
2019/03/17
4K0
在linux后台运行脚本的方法和命令
后台运行脚本 执行脚本test.sh:./test.sh 中断脚本test.sh:ctrl+c 在1的基础上将运行中的test.sh,切换到后台并暂停:ctrl+z 执行ctrl+z后,test.sh在后台是暂停状态(stopped),使用命令:bg number让其在后台开始运行(“number”是使用jobs命令查到的 [ ]中的数字,不是pid) 直接在后台运行脚本test.sh:./test.sh & 查看当前shell环境中已启动的任务情况:jobs 将test.sh切换到前台运行:fg %number(”number”为使用jobs命令查看到的 [ ] 中的数字,不是pid) 中断后台运行的test.sh脚本:先fg %number切换到前台,再ctrl+c;或是直接kill %number 以上两种在后台运行test.sh的方法,当遇到退出当前shell终端时,后台运行的test.sh也就结束了。这是因为以上两种方法使得test.sh在后台运行时,运行test.sh进程的父进程是当前shell终端进程,关闭当前shell终端时,父进程退出,会发送hangup信号给所有子进程,子进程收到hangup以后也会退出。所以要想退出当前shell终端时test.sh继续运行,则需要使用nohup忽略hangup信号。
大数据流动
2020/06/19
3.6K0
获取程序运行时间 - Linux Shell 脚本
下面的脚本可以获取一段程序的运行时间: #!/bin/bash start=$(date +%s) sleep 5; end=$(date +%s) take=$(( end - start )) echo Time taken to execute commands is ${take} seconds. 其中: date +%s获取当前的纪元时(Unix时间),即自世界标准时间(UTC)1970年1月1日0时0分0秒起流逝的秒数。 sleep 5使程序延时5秒钟。 take=$(( end - s
mwangblog
2019/06/03
17K0
[新手必看] 17个常见的Python运行时错误
对于刚入门的Pythoner在学习过程中运行代码是或多或少会遇到一些错误,刚开始可能看起来比较费劲。随着代码量的积累,熟能生巧当遇到一些运行时错误时能够很快的定位问题原题。下面整理了常见的17个错误,希望能够帮助到大家。
龙哥
2019/11/11
1.1K0
pycharm运行时报configuration错误「建议收藏」
错误原因是该项目未配置正确的python解释器。在file setting中找到解释器位置
全栈程序员站长
2022/09/26
1.4K0
pycharm运行时报configuration错误「建议收藏」
17个新手常见 Python 运行时错误
当初学 Python 时,想要弄懂 Python 的错误信息的含义可能有点复杂。这里列出了常见的的一些让你程序 crash 的运行时错误。 1)忘记在 if , elif , else , for , while , class ,def 声明末尾添加 :(导致 “SyntaxError :invalid syntax”) 该错误将发生在类似如下代码中: if spam == 42 print('Hello!') 2)使用 = 而不是 ==(导致“SyntaxError: invalid syntax
Crossin先生
2018/04/16
1.2K0
17个新手常见Python运行时错误
企鹅号小编
2017/12/28
1.4K0
17个新手常见Python运行时错误
17个新手常见Python运行时错误
当初学 Python 时,想要弄懂 Python 的错误信息的含义可能有点复杂。这里列出了常见的的一些让你程序 crash 的运行时错误。
bear_fish
2018/09/20
8390

相似问题

Python脚本在终端中正确运行时,通过crontab运行时会出现错误。

16

为什么在执行立即命令时会出现运行时错误?

12

Perl脚本在linux终端运行,但浏览器出现错误

31

Python脚本在作为ubuntu服务运行时会出现错误。

25

Python脚本在Jenkins运行时会出现语法错误

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文