为什么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++库中还包含一些子程序,它们把数据发送到显示器,并知道如何读写硬盘上的数据文件。
相关推荐HOT
更多>>vector容器原理是什么?
一、vector容器原理vector容器分配的是一块连续的内存空间,每次容器的增长,并不是在原有连续的内存空间后再进行简单的叠加,而是重新申请一块...详情>>
2023-10-20 18:14:35单调栈什么时候从后向前遍历,什么时候从前向后遍历?
一、单调栈什么时候从后向前遍历,什么时候从前向后遍历如果是求右边的名列前茅个最大,那么就是从右向左遍历,构建单调递增栈。如果是求右边的...详情>>
2023-10-20 14:41:19HashMap为什么不用B+树来替换红黑树?
一、HashMap不用B+树来替换红黑树的原因1、算法实现复杂Java中已经实现了红黑树,而B+树的实现还需要从头开始,复杂度会更高。2、底层不符合Has...详情>>
2023-10-20 14:08:41数据结构的主要内容有哪些?
一、基本概念和术语1.数据数据是描述客观事物的符号,是计算机可以操作的对象,是能被计算机识别,并输入到计算机处理的符号集合。(数据不仅仅...详情>>
2023-10-20 13:16:16