通过与 Jira 对比,让您更全面了解 PingCode

  • 首页
  • 需求与产品管理
  • 项目管理
  • 测试与缺陷管理
  • 知识管理
  • 效能度量
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案

25人以下免费

目录

为什么C++和别的语言相比运行速度这么快

C++和别的语言相比运行速度这么快是因为,C++是全部翻译后再进行执行的语言,而Java与python、php、ruby、C#是边执行边翻译的语言。C++是C的超集。在(C++) – C的这部分语言特性中有很多会降低执行效率。

一、C++和别的语言相比运行速度这么快的原因

C++和别的语言相比运行速度这么快,是因为C++是全部翻译后再进行执行的语言,而Java与python、php、ruby、C#是边执行边翻译的语言。C++是C的超集。在(C++) – C的这部分语言特性中有很多会降低执行效率。

一个例子是dynamic_cast,执行一个dynamic_cast要消耗100-300个CPU cycles,因为机器要跳到一段特别的snippet(一小段程序)去检查type inheritance,在内层循环中使用它无非是大大浪费时间。另一个例子是大家都很熟悉的vtable,这里不多说了。

但是一些增加了的语言特性会极大地提高编译器识别并对代码进行优化的能力。最简单的就是inline关键词。在C中程序员是不能显示地告诉编译器要不要inline某个函数,C++有了这个能力,也就是说把控制权更多地交给了写代码的人(虽然最终不一定会inline)。inline和const这两个关键词使得在global constant propagation这个编译器优化过程里,一些在底层函数中,在C里不能被全局识别的常数都能被顺利地展开,这样生成的代码必然比C要快得多。(这一段需要一些编译器优化的知识才能理解)

题外说一句,编译器很重要。说一个之前优化代码的例子:在做循环内的运算优化时,如果运算数据在内存里相邻并对齐,GCC可以检测出来并生成并行代码(在X86上是Intel SSE指令)。最终我通过数据对齐让GCC生成SIMD代码将循环速度提升了20倍。这一点上C和C++收到的效果是一样的。

延伸阅读:

二、C++工作原理

C++语言的程序开发环境,为了方便测试,将调试环境做成了解释型。即开发过程中,以解释型的逐条语句执行方式来进行调试,以编译型的脱离开发环境而启动运行的方式来生成程序最终的执行代码。

开发C++应用程序,需要经过编写源程序、编译、连接程序生成可执行程序、运行程序四个步骤。生成程序是指将源码(C++语句)转换成一个可以运行的应用程序的过程。如果程序编写正确,那么通常只需按一个功能键,即可完成该过程。

名列前茅步对程序进行编译,这需要用到编译器(compiler)。编译器将C++语句转换成机器码(也称为目标码);如果该步骤成功执行,下一步就是对程序进行链接,这需要用到链接器(linker)。链接器将编译获得机器码与C++库中的代码进行合并。C++库包含了执行某些常见任务的函数(“函数”是子程序的另一种称呼)。例如,一个C++库中包含标准的平方根函数sqrt,所以不必亲自计算平方根。C++库中还包含一些子程序,它们把数据发送到显示器,并知道如何读写硬盘上的数据文件。

相关文章