面试时被问到这个问题,发现自己一直以来理所当然的认为C++快,却没有具体分析原因。下面简单总结一下为什么快。

当我们编写程序时,我们需要将程序转换为计算机可以理解的机器语言。不同的语言有不同的执行机制。以C++,Java和Python的执行过程为例。

C++程序的执行过程:

预编译(预处理): 预处理器将源代码中的所有预处理指令(例如#include, #define)替换为实际的代码。预处理器还会删除注释和空格,并将所有代码放在一个文件中;

编译:编译器将预处理后的代码编译成汇编代码。汇编代码是一种低级语言,它使用助记符代替二进制代码。汇编代码是可读的,并且可以通过反汇编器转换回机器代码。在此阶段,诸如内联函数展开,常数const替换等都是在此阶段执行。

汇编:汇编器将汇编代码转换为机器代码。机器代码是计算机可以直接执行的二进制代码。连接是将多个目标文件合并成一个可执行文件的过程。连接器将所有目标文件中的符号引用解析为符号定义,并将它们合并到一个单独的输出文件中。连接器还将所有目标文件中的代码和数据段合并到一个单独的输出文件中。(也可以将连接看成是编译的下一步。)

执行: 连接器将机器语言转换为可执行文件之后,可执行文件在目标机器上运行。

Java程序的执行过程:

Java源代码被编译成Java字节码。

Java虚拟机(JVM)在目标机器上解释执行Java字节码。

Python程序的执行过程:

Python源代码被解释器解释执行。

优越原因

C++的性能优越是因为它是一种编译型语言,它的程序被编译成本地机器代码,可以直接在目标机器上运行。这意味着C++程序的执行速度非常快。相比之下,Java和Python是解释型语言,它们的程序需要在运行时被解释器解释执行,这会导致执行速度较慢。

那么为什么解释型语言的执行效率比编译型语言低?这是因为解释型语言在运行时需要将源代码转换成计算机可识别的二进制数据后再执行,而编译型语言的程序只要经过编译器编译之后,每次运行程序都可以直接运行,不需要再次“翻译”。此外,解释型语言的解释器需要在运行时对源代码进行解释,而编译型语言的编译器在编译时就已经对源代码进行了优化,因此执行效率更高

为什么C++语言性能优越?的更多相关文章

  1. Swift,Objective-C语言性能对照測试

    原文发表于踏得网 Swift包括了非常多现代语言特性尤其是从一些脚本语言如Javascript/Ruby中汲取了营养. 此外苹果公布Swift时,使用特别选用的一些样例来宣称Swift性能对于Ojbe ...

  2. Linq语言性能比较

    我不只一次听到不少做技术的朋友随口一句,“linq性能是最差的”,由于缺少具体的数字比照也就没在意,但心里隐隐觉得事实应该不是这样的,我记得我第一次听到有人贬低C# 3.0是在我工作后不久的一个夏季, ...

  3. 开发语言性能对比,C++、Java、Python、LUA、TCC

    一直想做开发语言性能对比,刚好有时间都做了给大家参考一下, 编译类:C++和Java表现还不错 脚本类:TCC脚本动态运行C语言,性能比其他脚本快好多... 想玩TCC的同学下载测试包,TCC目录下修 ...

  4. Go语言性能优化

    原文:http://bravenewgeek.com/so-you-wanna-go-fast/ 我曾经和很多聪明的人一起工作.我们很多人都对性能问题很痴迷,我们之前所做的是尝试逼近能够预期的(性能) ...

  5. PHP性能之语言性能优化说明

    PHP语言性能优化优化啥? 如下图所示,PHP直接执行的是opcode,所以我们尽量减少扫描和转码解析. 这是我们第一个优化点,尽量使用PHP内置的函数代替我们的代码来实现同样的功能. 和我们自己写的 ...

  6. 各种语言性能(CPU密集型程序)比较

    都进行Fib数列计算,计算到n=40的计算时间: 注意:开始,我以为上图中的第二列就是代表C++的性能.但是现在发现,完全不正确. 如果你使用同样的抽象和同样的逻辑去实现同样的代码,C和C++的性能几 ...

  7. Go语言性能剖析利器--pprof实战

    作者:耿宗杰 前言 关于pprof的文章在网上已是汗牛充栋,却是千篇一律的命令介绍,鲜有真正实操的,本文将参考Go社区资料,结合自己的经验,实战Go程序的性能分析与优化过程. 优化思路 首先说一下性能 ...

  8. PHP语言性能优化——少使用魔术方法

    对以下使用魔术方法和不适用魔术方法运行时间进行比较 使用魔术方法test1.php: <?php /** * 测试类 */ class test { private $name = " ...

  9. PHP性能之语言性能优化:安装VLD扩展——检测性能

    使用Linux命令安装 //下载安装包 wget http://pecl.php.net/get/vld-0.14.0.tgz //解压包 tar zxvf vld-0.14.0.tgz //进入编译 ...

  10. 各大语言性能对比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. ...

随机推荐

  1. link和@import的对比

    概念的区别  @import 是css的语法规则: link 是HTML标签 用途的区别  @import 是css语法,只能用来导入样式文件: link 除了引入样式,还可引入其他资源文件 加载顺序 ...

  2. fgets()函数的详解以及使用时需要注意的一些细节-C语言基础

    这篇文章要探讨的是"fgets()函数的详解以及使用时需要注意的一些细节".涉及fgets()函数的应用和需要注意的问题.属于C语言基础篇(持续更新). fgets()(函数原型: ...

  3. idea修改背景颜色|护眼色|项目栏背景修改

    https://blog.csdn.net/heytyrell/article/details/89743068

  4. json提取器通过多条件筛选提取ID

    可能在某些列表中如名称会有重复,此时就需要使用多个搜索条件来判定唯一性 $.data.[?(@.tymc=="测试测试")].[?(@.plat_merchandise_id==& ...

  5. python random包常用函数

    random.random() random.random()方法返回一个随机数,其在0至1的范围之内,以下是其具体用法: import random print ("随机数: " ...

  6. mybaits-plus 部分注解说明

    参考: https://blog.csdn.net/qq_45684867/article/details/123951309

  7. luac编译命令

    luac -o out.lua 1.lua 可以不要后缀 luac -o out 1.lua

  8. 对于MyBatis的模糊查询的实现+文本框、单选框以及复选框的数据回显的实现

    MyBatis的模糊查询sql语句与之前使用的不太一样 主要是利用下面这种语句实现的(查了好久的,认真记一下吧!) select * from huodong where theme like con ...

  9. D3和X6

    D3 版本 d3已经更新到v7版本,中文文档只更新到v4版本,存在部分api不适用和过时问题 使用d3-darge插件布局,插件适配d3版本为v5,近年未更新 API 使用darge中setNode和 ...

  10. 【单元测试】Junit 4(六)--junit4测试优先级顺序

    ​ @FixMethodOrder的顺序也并不一定是方法在代码中定义的顺序,这与JVM的实现有关. ​ 我们在写JUnit测试用例时,有时候需要按照定义顺序执行我们的单元测试方法,比如如在测试数据库相 ...