面试时被问到这个问题,发现自己一直以来理所当然的认为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. java map重写 转大写、转驼峰

    /** * @author admin * @Description * 转大写 */ public class HashMapUpper<V> extends HashMap<St ...

  2. 西电oj135题 拼数字并排序

    类别综合 时间限制 1S 内存限制 1000Kb 问题描述 对于输入的字符串(只包含字母和数字),将其中的连续数字拼接成整数,然后将这些整数按从大到小顺序输出.例如字符串"abc123d5e ...

  3. 查看linux用户密码过期时间并提醒

    1.查看linux用户密码过期时间命令 [root@Centos6 /]# chage -l euser Last password change : Aug 28, 2015 [最近一次修改密码的时 ...

  4. Linux中profile、bashrc、bash_profile之间的区别和联系(转)

    /etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置. 英文描述为: # /etc/pr ...

  5. 密码破解-hashcat的简单使用

    在我们抓取到系统的hash值之后,需要通过一些工具来破解密码 hashcat是一款可以基于显卡暴力破解密码的工具,几乎支持了所有常见的加密,并且支持各种姿势的密码搭配 在kali Linux中自带的有 ...

  6. Less-3 和 Less-4 ')闭合绕过

    判断注入类型 测试:http://localhost/sqli-labs-master/Less-3/index.php?id=1a 正常回显,可以判断为 字符型注入 闭合字符串执行而已 SQL语句 ...

  7. 小白都能看懂得Xxl-job安装教程

    大家好,我是咔咔 不期速成,日拱一卒 一.背景 在平时的业务场景中,经常有一些场景需要使用定时任务,比如: 某个时间点发送优惠券 发送短信等等. 批量处理数据:批量统计上个月的账单,统计上个月销售数据 ...

  8. JAVA数据类型以及什么是字节

    强类型语言:要求变量的使用要严格符合规定,所有变量都必须先定义才能使用(安全性高) java的数据类型分为两大类 基本类型(primitive type) 引用类型(reference type) / ...

  9. epub文件如何查看

    http://epub-reader.online/# 你可以用在线的epub阅读器查看. 你可以使用本地的epub阅读器查看.如neatReader,wps. 你可以将epub转换成pdf,然后查看 ...

  10. .NET应用系统的国际化-基于Roslyn抽取词条、更新代码

    上篇文章我们介绍了 VUE+.NET应用系统的国际化-多语言词条服务 系统国际化改造整体设计思路如下: 提供一个工具,识别前后端代码中的中文,形成多语言词条,按语言.界面.模块统一管理多有的多语言词条 ...