![]() |
C语言程序为什么比其他语言程序都要快?它是牺牲了什么换来的? |
珠江路在线
2019年9月9日
【
转载
】嵌入式时代 编辑:
|
|
网络上 仿佛向来有种说法:C语言程序运行时要比 其余语言编写的程序快得多,由于它“离底层机器很近”,这个说法正确吗?假如正确,那 终究是什么阻挠了 其余语言编写的程序和C语言程序一样快呢?
什么阻挠了 其余语言编写的程序和C语言程序一样快呢?
C语言程序快是由于它 容易
编程语言其实便是程序员与机器沟通的一门“外语”, 能够认为编程语言是为程序员和机器服务的 。事实上,在设计编程语言时, 往往需求在一些问题上取舍以寻求 均衡,天平的两端则分别是程序员和机器 。
人类和计算机的思量 模式是有很大差别的, 因而假如某种编程语言 偏袒程序员,那么可能程序员写程序会很容易,然而最后得到的程序对机器就不够 友爱了,效率会有损失 。例如 Python,JavaScript 等脚本语言 。
相反,假如某种编程语言 偏袒机器,那么最后得到的程序效率会得到最大程度的 晋升,然而这样的编程语言可能关于程序员就会不太 友爱,开发效率会有所减低 。这类编程语言以C语言,以及汇编语言为代表 。
开发效率会有所减低
C语言诞生时,计算机技术还不是很发达,这可能是影响“天平” 均衡的一个主要因素 。如今,新浮现的一些编程语言通常都会更加“照应”程序员,“垃圾回收”以及“动态类型”等机制 几乎已经成为标配了 。
缘由也很 容易,由于在如今快节奏(快到“浮躁”)的社会,开发效率低下的编程语言是 无奈得到 宽泛进展的 。
正如前文所说,当编程语言的“天平”向程序员 歪斜时,最后得到的程序效率自然会有所减低 。由于编程语言要“照应”程序员是要付出代价的——“垃圾回收”等机制 本身也会 消费相当一 部分的计算机性能 。 固然今日的计算机技术已经大大进展,然而计算机的运算 威力始终是有限的 。
计算机的运算 威力始终是有限的
而C语言也没有这些额外的机制,自然最后C语言程序的运行速度也会比别的语言程序高 。固然,这也 象征着C语言程序员需求自己治理 调配的内存,自己幸免内存溢出、 透露等问题,还要自己 解决变量的类型 。
再来谈谈C语言
设计人员在设计C语言时,更多考量的是最后C程序的运行效率, 因而像下面这样的几种安全 审查,都要依赖程序员自己,C语言 本身是不会 审查的:
- 数组的索引边界
- 未初始化的变量值
- 内存是不是 透露
- 空指针的 引用
以数组的 利用为例,Java程序设计语言会在 虚构机中进行一些 步骤调用、绑定 审查以及 其余的一些安全 审查 。这是语言 本身提供的服务,这些 审查 潜藏在底层,对开发 利用的程序员是不可见的 。然而这样的安全 审查无疑对程序员是 友爱的,由于它添加了 利用的安全性 。
安全 审查无疑对程序员是 友爱的
而在C语言程序开发中, 即便是一些十分琐碎的 事件也要程序员自己 解决 。例如在执行 memcpy() 等内存操作时,是不会 审查要复制的内存区域是不是有重叠的 。
C语言的这些 特点在有些程序员看来是缺陷,但 其余一些程序员却认为这是一种灵便, 能够让程序员 存在更大的权限的治理机器,以及 获得计算机的每丝毫性能 。
固然C语言号称是一种 支撑可移植程序开发的编程语言,它的一些语法也竭力实现这一 指标,然而C语言并不想 胁迫程序员以可移植的 模式编写代码,以 预防C语言成为“高级汇编语言”,毕竟编写特定于机器的代码是C语言的优势之一 。
C语言作为一门古老的编程语言,其热度却始终没有削减,自然的,C语言近些年也是得到众多进展和拓展的,从C89到C90,再到C99,C11 标准 。然而C语言始终没有偏离它的 根本 精力:
- 相信程序员,尽量把操纵权交给程序员 。
- 不阻挠程序员做他想做的事,例如有时数组下标为负也和意 arr[-1] 。
- 维持语言简洁 。
- 只提供一种操作 步骤 。
- 维持C语言程序的高效率, 即便可能会与可移植性相悖 。
最后一句需求稍加解释:生成高效的程序是C语言的最主要的 长处之一 。为了确保看似十分 容易的操作不会招致 瓦解,C语言有时宁愿在通用 形象 规定上做出 斗争,这也是C语言 标准中有许多“未定义”的 规定 。
C语言有时宁愿在通用 形象 规定上做出 斗争
例如,short int,int, long int 整数类型 终究占用多少内存空间,C语言 标准并没有给出确定的定义,这就 象征着这几种整数类型在不同的机器上占用内存空间大小可能是不同的 。再 比方, 固然C语言 标准规定了 char 类型占用一字节内存空间,然而却没有定义其符号,也便是说 char 类型在有的机器上是有符号的,而在 其余机器上可能是无符号的 。
C语言的缺陷
正如前文 探讨的,C语言的“天平”更加 偏袒机器,这使得C语言程序员的工作量添加不少 。有一些 Java 程序员甚至说:“C语言程序员 花费一个月开发的程序运行需求 0.05 秒,而我 只有求一天就能开发出这样的程序,它运行 只有求 0.1 秒,所以,C语言快吗?”
C语言的缺陷
固然稍微 夸大了一些,然而确实应该考量这样的问题 。普通来说,C语言程序 本身确实会比 其余编程语言程序快一些,然而有些 名目确实不需求那么快,它们对 deadline 的要求更加 苛刻,这时可能C语言就不再那么 适合了 。
因而,C语言程序的效率确实高,但它是以 就义程序员开发效率换来的 。这其实决定了它与 其余编程语言的 利用领域,假如 谋求资源 消费以及效率的极致,那么C语言无疑是最佳的 取舍 。这个领域以嵌入式领域为代表 。假如 名目更多 谋求的是开发效率,那么C语言显然就不是 适合的人选了 。
点个赞再走吧
欢送在评论区一同 探讨,质疑 。文章都是手打原创,天天最 通俗的介绍C语言、linux等嵌入式开发,喜爱我的文章就关注一波吧, 能够看到最新更新和之前的文章哦 。
未经许可,禁止转载 。