0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为什么说C语言程序运行时要比其他语言编写的程序快得多

C语言编程学习基地 来源:C语言编程学习基地 作者:C语言编程学习基地 2022-03-16 08:45 次阅读

C语言程序运行时要比其他语言编写的程序快得多,因为它“离底层机器很近”,这个说法正确吗?

如果正确,那究竟是什么阻止了其他语言编写的程序和C语言程序一样快呢?

C语言程序快是因为它简单

编程语言其实就是程序员与机器沟通的一门“外语”,可以认为编程语言是为程序员和机器服务的。事实上,在设计编程语言时,常常需要在一些问题上取舍以寻求平衡,天平的两端则分别是程序员和机器。

人类和计算机的思考方式是有很大差异的,因此如果某种编程语言偏向程序员,那么可能程序员写程序会很方便,但是最终得到的程序对机器就不够友好了,效率会有损失。例如 PythonJavaScript 等脚本语言。

相反,如果某种编程语言偏向机器,那么最终得到的程序效率会得到最大程度的提升,但是这样的编程语言可能对于程序员就会不太友好,开发效率会有所降低。这类编程语言以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语言程序本身的确会比其他编程语言程序快一些,但是有些项目的确不需要那么快,它们对 deadline 的要求更加苛刻,这时可能C语言就不再那么合适了。

因此,C语言程序的效率的确高,但它是以牺牲程序员开发效率换来的。这其实决定了它与其他编程语言的应用领域,如果追求资源消耗以及效率的极致,那么C语言无疑是最佳的选择。这个领域以嵌入式领域为代表。如果项目更多追求的是开发效率,那么C语言显然就不是合适的人选了。

欢迎在评论区一起讨论,质疑。

写在最后:对于准备成为一名优秀程序员的朋友,如果你想更好的提升你的编程核心能力,让自己成为一个具有真材实料的厉害的程序员,不妨从现在开始!C/C++,永不过时的编程语言~

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

原文标题:编程小知识:C语言程序为什么是效率最快的?

文章出处:【微信公众号:C语言编程学习基地】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7528

    浏览量

    128376
  • 编程
    +关注

    关注

    88

    文章

    3439

    浏览量

    92375
  • 程序
    +关注

    关注

    114

    文章

    3630

    浏览量

    79527

原文标题:编程小知识:C语言程序为什么是效率最快的?

文章出处:【微信号:cyuyanxuexi,微信公众号:C语言编程学习基地】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    c语言程序设计谭浩强

    的许多特点。因此特别适合于写系统软件。C语言诞生后,许多原来用汇编语言写的软件,现在可以用C语言编写
    发表于 07-10 18:08

    【原创】单片机C语言程序的存储区域解读

    代码,链接过程则将各个源文件生成的二进制机器代码文件组合成一个文件。C语言编写程序经过编译-链接后,将形成一个统一文件,它由几个部分组成。在程序
    发表于 07-04 19:05

    单片机C语言程序的存储区域解读

    代码,链接过程则将各个源文件生成的二进制机器代码文件组合成一个文件。C语言编写程序经过编译-链接后,将形成一个统一文件,它由几个部分组成。在程序
    发表于 07-13 17:02

    使用C语言编写单片机的程序

    上次说到了使用C语言编写单片机的程序,既然使用编程语言,就需要有软件把程序语言翻译成机器能懂的机
    发表于 07-14 08:24

    C语言编程程序的内存如何布局

    编译-连接后,将形成一个统一文件,它由几个部分组成。在程序运行时又会产生其他几个部分,各个部分代表了不同的存储区域:  1.代码段(Code或Text)  代码段由程序中执行的机器代码
    发表于 09-13 15:04

    C语言运行时需要和栈的意义

    运行时需要和栈的意义1.栈C语言运行时,由汇编来提供条件,主要是需要栈。C语言与栈的关系:
    发表于 12-20 07:11

    C语言内存运行时不同变量是怎样分配的

    C语言内存运行时不同变量是怎样分配的?怎样验证C语言编译后的内存地址分配是否合理?
    发表于 02-25 06:37

    编写一个以C语言为基础的DSP程序

    实验2 : 编写一个以C 语言为基础的DSP程序一.实验目的1.学习用标准C语言编制程序;了解常用的C
    发表于 03-17 00:13 3319次阅读
    <b class='flag-5'>编写</b>一个以C<b class='flag-5'>语言</b>为基础的DSP<b class='flag-5'>程序</b>

    编写一个以汇编(ASM)语言为基础的DSP程序

    实验3 :编写一个以汇编(ASM)语言为基础的DSP程序一. 实验目的1.学习用汇编语言编制程序;了解汇编
    发表于 03-17 00:14 6774次阅读
    <b class='flag-5'>编写</b>一个以汇编(ASM)<b class='flag-5'>语言</b>为基础的DSP<b class='flag-5'>程序</b>

    C语言教程之显示程序运行时

    C语言教程之显示程序运行时间,很好的C语言资料,快来学习吧。
    发表于 04-25 16:09 0次下载

    关于c语言编写的算法程序

    关于c语言编写的算法程序
    发表于 04-09 17:47 12次下载

    ch32v307记录程序运行时

    ,不仅会降低用户的体验,甚至可能会导致系统的崩溃。 因此,在程序设计和调试中,我们常常需要记录程序运行时间,并通过不断的优化来提升程序的性能。本文将介绍如何在各种编程
    的头像 发表于 08-22 15:53 468次阅读

    c语言编写的源程序可以直接运行

    C语言编写的源程序不能直接运行,必须经过一系列的编译链接过程才能生成可执行文件,然后才能运行。 C语言
    的头像 发表于 11-26 09:03 2928次阅读

    c语言hello world程序编写

    C语言"Hello world"程序编写过程,并提供一些实用技巧和注意事项。 首先,我们需要一个C语言开发环境来编写
    的头像 发表于 11-26 09:23 1320次阅读

    jvm运行时内存区域划分

    JVM是Java Virtual Machine(Java虚拟机)的缩写,它是Java编程语言运行环境。JVM的主要功能是将Java源代码转换为机器代码,并且在运行时管理Java程序
    的头像 发表于 12-05 14:08 255次阅读