为什么C++语言性能优越?
面试时被问到这个问题,发现自己一直以来理所当然的认为C++快,却没有具体分析原因。下面简单总结一下为什么快。
当我们编写程序时,我们需要将程序转换为计算机可以理解的机器语言。不同的语言有不同的执行机制。以C++,Java和Python的执行过程为例。
C++程序的执行过程:
预编译(预处理): 预处理器将源代码中的所有预处理指令(例如#include, #define)替换为实际的代码。预处理器还会删除注释和空格,并将所有代码放在一个文件中;
编译:编译器将预处理后的代码编译成汇编代码。汇编代码是一种低级语言,它使用助记符代替二进制代码。汇编代码是可读的,并且可以通过反汇编器转换回机器代码。在此阶段,诸如内联函数展开,常数const替换等都是在此阶段执行。
汇编:汇编器将汇编代码转换为机器代码。机器代码是计算机可以直接执行的二进制代码。连接是将多个目标文件合并成一个可执行文件的过程。连接器将所有目标文件中的符号引用解析为符号定义,并将它们合并到一个单独的输出文件中。连接器还将所有目标文件中的代码和数据段合并到一个单独的输出文件中。(也可以将连接看成是编译的下一步。)
执行: 连接器将机器语言转换为可执行文件之后,可执行文件在目标机器上运行。
Java程序的执行过程:
Java源代码被编译成Java字节码。
Java虚拟机(JVM)在目标机器上解释执行Java字节码。
Python程序的执行过程:
Python源代码被解释器解释执行。
优越原因
C++的性能优越是因为它是一种编译型语言,它的程序被编译成本地机器代码,可以直接在目标机器上运行。这意味着C++程序的执行速度非常快。相比之下,Java和Python是解释型语言,它们的程序需要在运行时被解释器解释执行,这会导致执行速度较慢。
那么为什么解释型语言的执行效率比编译型语言低?这是因为解释型语言在运行时需要将源代码转换成计算机可识别的二进制数据后再执行,而编译型语言的程序只要经过编译器编译之后,每次运行程序都可以直接运行,不需要再次“翻译”。此外,解释型语言的解释器需要在运行时对源代码进行解释,而编译型语言的编译器在编译时就已经对源代码进行了优化,因此执行效率更高
为什么C++语言性能优越?的更多相关文章
- Swift,Objective-C语言性能对照測试
原文发表于踏得网 Swift包括了非常多现代语言特性尤其是从一些脚本语言如Javascript/Ruby中汲取了营养. 此外苹果公布Swift时,使用特别选用的一些样例来宣称Swift性能对于Ojbe ...
- Linq语言性能比较
我不只一次听到不少做技术的朋友随口一句,“linq性能是最差的”,由于缺少具体的数字比照也就没在意,但心里隐隐觉得事实应该不是这样的,我记得我第一次听到有人贬低C# 3.0是在我工作后不久的一个夏季, ...
- 开发语言性能对比,C++、Java、Python、LUA、TCC
一直想做开发语言性能对比,刚好有时间都做了给大家参考一下, 编译类:C++和Java表现还不错 脚本类:TCC脚本动态运行C语言,性能比其他脚本快好多... 想玩TCC的同学下载测试包,TCC目录下修 ...
- Go语言性能优化
原文:http://bravenewgeek.com/so-you-wanna-go-fast/ 我曾经和很多聪明的人一起工作.我们很多人都对性能问题很痴迷,我们之前所做的是尝试逼近能够预期的(性能) ...
- PHP性能之语言性能优化说明
PHP语言性能优化优化啥? 如下图所示,PHP直接执行的是opcode,所以我们尽量减少扫描和转码解析. 这是我们第一个优化点,尽量使用PHP内置的函数代替我们的代码来实现同样的功能. 和我们自己写的 ...
- 各种语言性能(CPU密集型程序)比较
都进行Fib数列计算,计算到n=40的计算时间: 注意:开始,我以为上图中的第二列就是代表C++的性能.但是现在发现,完全不正确. 如果你使用同样的抽象和同样的逻辑去实现同样的代码,C和C++的性能几 ...
- Go语言性能剖析利器--pprof实战
作者:耿宗杰 前言 关于pprof的文章在网上已是汗牛充栋,却是千篇一律的命令介绍,鲜有真正实操的,本文将参考Go社区资料,结合自己的经验,实战Go程序的性能分析与优化过程. 优化思路 首先说一下性能 ...
- PHP语言性能优化——少使用魔术方法
对以下使用魔术方法和不适用魔术方法运行时间进行比较 使用魔术方法test1.php: <?php /** * 测试类 */ class test { private $name = " ...
- PHP性能之语言性能优化:安装VLD扩展——检测性能
使用Linux命令安装 //下载安装包 wget http://pecl.php.net/get/vld-0.14.0.tgz //解压包 tar zxvf vld-0.14.0.tgz //进入编译 ...
- 各大语言性能对比PK数据
这里我用的python版本是Python 3.6.2(64位),php版本是PHP 7.0.12(64位),node版本是v6.11.0(64位),Go 1.8.3(64位),C# 基于.Net 4. ...
随机推荐
- SSD目标检测网络解读(含网络结构和内容解读)
SSD实现思路 SSD具有如下主要特点: 从YOLO中继承了将detection转化为regression的思路,一次完成目标定位与分类 基于Faster RCNN中的Anchor,提出了相似的Pri ...
- CountDownLatch/CyclicBarrierDemo/Samaphore
CountDownLatch CountDownLatch:让一些线程阻塞直到另外一些完成后才被唤醒 CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,调用线程会被阻塞 ...
- 财开心批量处理系统V4.0
前言 上次分析了亿企代账对他的发票提取有很大兴趣,同时下载了几大财务厂商提供的发票提取,很多都是采用的这个,如云账房销项提取插件还有本次研究的财开心批量处理系统 分析 demo 直接用亿企代账分析的代 ...
- 转载:Windows Server查看W3SVC IIS服务器中对应的网站日志
W3SVC日志文件夹中序号的含义,格式就是W3SVC+网站ID 如果没有自定义站点的日志路径,日志默认的路径是C:\inetpub\logs\LogFiles\ 基本上每个网站存放日志的文件夹名称都是 ...
- cider 二面
cider 二面 1.祖传自我介绍 2.当前BLF外卖业务缺点是什么? 产品单一 : 跟竞品比较起来,产品单一导致用户流量很少 3.QLExpress二次开发的原因 流程对接 提升性能 后台对接 4. ...
- mysql 存储国过程实现竖表变横表(将行数据值变为字段)
示例: 表结构如下: CREATE TABLE `pressure` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键', `presurena ...
- webgl 系列 —— 变换矩阵和动画
其他章节请看: webgl 系列 变换矩阵和动画 动画就是不停地将某个东西变换(transform).例如将三角形不停地旋转就是一个动画 和 CSS transform 类似,变换有三种形式:平移.缩 ...
- ICSFUZZ:操纵I/O、二进制代码重用以及插桩,来Fuzzing工业控制应用程序
本文系原创,转载请说明出处 Please Subscribe Wechat Official Account:信安科研人,获取更多的原创安全资讯 源码:GitHub - momalab/ICSFu ...
- Command Injection-命令注入(命令执行)
什么是命令注入? 命令注入是滥用应用程序的行为在操作系统上执行命令,使用与设备上的应用程序运行时相同的权限.例如,在作为名为joe的用户运行的web服务器上实现命令注入将在该joe用户下执行命令,从而 ...
- CURL 常用命令
参考博客:https://blog.csdn.net/wangpengfei163/article/details/80900391