为什么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. ...
随机推荐
- iOS Unity 项目解析
本文旨在记录Unity 导出的iOS 项目笔记,另带接入SDK的终极方案,顺带对比Android 项目 1蓝色的目录 Data 这个就是项目的数据,每个项目不一样也就是这个目录不一样,是不是可以把这个 ...
- mysql数据库随笔
number(p,s):数值型,包括小数点前后的位数Integer:整数vachar2:字符串nvachar2:国际化使用字符串char:data:日期timestamp:时间戳BLOB:放大数据 事 ...
- Crypto入门 (十二)转轮机加密
前言: 杰弗逊转轮加密,可以自己手动排列完成但是繁琐而且容易弄错,还是建议使用编程,我在手动弄得时候就是复制粘贴少了一个字母,弄了很久才发现,如果编程得话,就不会这样拉 转轮机加密: 题目如下: 1: ...
- C++多线程编程之【线程管理】
1.如何启动线程? 构建std::thread对象即可. 直接传函数名(地址) 创建一个类并创建伪函数. 构建对象(实例化),将对象作为参数传入thread对象实例化. 2.为什么要等待线程? 首先必 ...
- 前端基础复习之HTML
1.web基础知识 1 1.Web基础知识 2 1.Internet 3 1.简介 4 Internet 实际上就是由计算机所组成的网络结构 5 6 服务: 7 1.Telnet 8 远程登录 9 2 ...
- 微信小程序 真机调试白屏
真机调试白屏,报define is not defined 解决: 更新小程序版本
- LR12输出+日志
LR12输出 输出函数:1.lr_log_message() // 输出信息,并记录到 output.txt 中:2.lr_output_message() // 输出信息,不记录到日志文件中:3.l ...
- centos7所有用户循环登录
1 使用快捷键Ctrl+Alt+F2进入命令终端 2 输入账号密码 3 输入 /usr/bin/sudo 4 输入 startx 那种单用户,改配置的试了没有用
- DOC命令学习(一)
DOC命令学习(一) 命令 切换目录命令(cd) cd /d E: 查看目录命令(dir) dir #查看# 回显命令(echo) @echo offset d = %date:~0,10%set ...
- 如何在 Apinto 实现 HTTP 与gRPC 的协议转换 (下)
上文给大家详细介绍了在 Apinto 上实现 HTTP 与 gRPC 的协议转换的基本内容,本篇我们将继续讲解如何在 Apinto-Dashboard 中进行配置. 配置 Apinto Apinto ...