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语言程序本身的确会比其他编程语言程序快一些,但是有些项目的确不需要那么快,它们对 deadline 的要求更加苛刻,这时可能C语言就不再那么合适了。
因此,C语言程序的效率的确高,但它是以牺牲程序员开发效率换来的。这其实决定了它与其他编程语言的应用领域,如果追求资源消耗以及效率的极致,那么C语言无疑是最佳的选择。这个领域以嵌入式领域为代表。如果项目更多追求的是开发效率,那么C语言显然就不是合适的人选了。
欢迎在评论区一起讨论,质疑。
写在最后:对于准备成为一名优秀程序员的朋友,如果你想更好的提升你的编程核心能力,让自己成为一个具有真材实料的厉害的程序员,不妨从现在开始!C/C++,永不过时的编程语言~
整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!
原文标题:编程小知识:C语言程序为什么是效率最快的?
文章出处:【微信公众号:C语言编程学习基地】欢迎添加关注!文章转载请注明出处。
审核编辑:汤梓红
相关推荐
压缩包内容为利用C语言编写的DSP一些基本的算法程序,大家可以下载来做参考。
发表于 04-19 10:22
的许多特点。因此特别适合于写系统软件。C语言诞生后,许多原来用汇编语言写的软件,现在可以用C语言编写了(例如著名的UNIX操作系统就是用C语言写的),而学习和使用C语言要比学习和使用汇编语言容
发表于 07-10 18:08
C语言程序设计技巧在许多应用软件运行时都带有命令行参数,其实这些命令行参数在C语言编写的程序中也可以实现,灵活地运用命令行参数进行处理可以有效地提高程序的运行效率,收到事半功倍的效果。 C语言
发表于 10-07 11:19
本帖最后由 eehome 于 2013-1-5 10:10 编辑
用C语言编写高效的ARM程序
发表于 08-16 16:43
文件。 C语言编写的程序经过编译-连接后,将形成一个统一文件,它由几个部分组成。在程序运行时又会产生其他几个部分,各个部分代表了不同的存储区域: 1.代码段(Code或Text) 代码段由程序中
发表于 05-16 10:58
本帖最后由 caizijinbao 于 2015-5-14 15:33 编辑
大家好,用LabVIEW2011编写程序,运行时菜单使用菜单编辑器制作,在winCE触摸设备上运行时,菜单
发表于 05-14 15:31
本帖最后由 aksdamo2 于 2015-11-11 20:03 编辑
为什么有人说谭浩强c语言程序设计不好?先来说说谭老师的贡献:谭浩强他是我国计算机普及和高校计算机基础教育的开拓者之一
发表于 10-19 21:02
我们在做一个交通灯系统,(交通灯倒计时时间用做的数码管显示)当数码管显示3,2,1时,交通灯要亮黄灯,我做了一个条件语句,当时间在0~3之间时亮黄灯,否则其他灯亮。。但是不知道怎么获取程序运行时间(想的是倒计时时间-程序运行时间
发表于 12-26 00:30
编译-连接后,将形成一个统一文件,它由几个部分组成。在程序运行时又会产生其他几个部分,各个部分代表了不同的存储区域: 1.代码段(Code或Text) 代码段由程序中执行的机器代码组成。在C语言
发表于 08-20 17:03
在于开发人员的效能。”反对C语言的人一直认为这种语言编写慢,容易出错,会带来意想不到的硬件相关问题,并且除了最初的程序员,其他人很难读懂它。这些因素会对提高设计效能产生不利影响。而很多最近出现的语言
发表于 09-08 22:18
,但是不可避免的因为运行时的不确定性也影响运行效率。2. python是解释执行相比于C语言编译性语言编写的程序,Python是解释执行语言,其运行过程是Python运行文件程序时,Python解释器将
发表于 02-01 18:47
运行时编写的大量工具和库。.NET另一个类似Java的优势是JIT优化。C#和.Net程序可以按照C语言提前编译,但它们主要由.Net运行时进行即时编译,并使用运行时信息进行优化。JIT编译允许对无法在
发表于 07-14 14:42
时间,这对于速度本身就有限制的单片机来说,是一个很大的负担。二、高级语言编写单片机程序的缺陷高级语言可以实现更为优化的算法,更为方便的执行方案,但是,高级语言对程序存储空间的占用要比汇编和C语言多很多
发表于 05-19 14:23
时间,这对于速度本身就有限制的单片机来说,是一个很大的负担。二、高级语言编写单片机程序的缺陷高级语言可以实现更为优化的算法,更为方便的执行方案,但是,高级语言对程序存储空间的占用要比汇编和C语言多很多
发表于 06-30 10:30
较难掌握。也就是说,对用C语言的人,要求对程序设计更熟练一些。当前阶段,在编程领域中,C语言的运用非常之多,它兼顾了高级语言和汇编语言的优点,相较于其它编程语言具有较大优势。计算机系统设计以及应用程序编写是
发表于 01-07 16:24
代码,链接过程则将各个源文件生成的二进制机器代码文件组合成一个文件。C语言编写的程序经过编译-链接后,将形成一个统一文件,它由几个部分组成。在程序运行时又会产生其他几个部分,各个部分代表了不同的存储
发表于 07-04 19:05
代码,链接过程则将各个源文件生成的二进制机器代码文件组合成一个文件。C语言编写的程序经过编译-链接后,将形成一个统一文件,它由几个部分组成。在程序运行时又会产生其他几个部分,各个部分代表了不同的存储
发表于 07-13 17:02
上次说到了使用C语言编写单片机的程序,既然使用编程语言,就需要有软件把程序语言翻译成机器能懂的机器码,把机器码下载进单片机,单片机才能运行。在这里,我们隆重推荐Keil uVision2,它支持众多
发表于 07-14 08:24
89C51单片机C语言编程课件教案.ppt第三章 单片机C语言程序设计; C语言编写单片机应用程序时,需根据单片机存储结构及内部资源定义相应的数据类型和变量,而标准的C语言程序不
发表于 07-15 06:12
PIC单片机C语言程序设计1 7学电子跟我来FOLLOW MEPIC 单片机C 语言程序设计(1)◆丁锦滔编者按:为了帮助具有PI C 单片机汇编语言知识的威廉希尔官方网站
人员或工程师,快速掌握利用C 语言编写
发表于 07-15 08:40
什么是C51程序?C语言的特点有哪些?C语言程序是怎样组成的?用C语言编写51单片机程序与用汇编语言编写51单片机程序有何不同?
发表于 07-15 10:56
运算符、顺序程序设计、分支程序设计、循环结构、数组等。学习C语言一定要知道它的利器——指针。这正是C语言强大、高效和灵活的地方。如果您没有学会指针,可以说,您就没有学到C语言的精髓。模块化程序设计...
发表于 07-20 07:25
我们平常所说的执行效率就是使用相同的算法在相同输入条件下完成相同计算所产生的系统开销,目前来说一般会更多关注执行时间方面的开销。所有语言编写的代码最终要运行,都要转化成机器码。在更短的时间内完成相同
发表于 07-20 06:39
如何使用keil4软件将编写的C语言程序汇编成汇编语言?
发表于 10-14 07:15
请问c语言是如何编写51单片机中断程序的?
发表于 10-14 08:02
C语言和汇编语言有哪些差异?如何利用C语言去编写单片机程序呢?
发表于 11-02 09:59
内部做开发的,而操作系统所有的内核都是C语言所编写的,所以说在嵌入式开发的过程中也选择C语言,肯定是具有一定的优势的。而且C语言相比较其它的高级语言编程,其语言特点对于嵌入式开发也是最为适合的一个。对于其它高级语言
发表于 11-05 07:44
运行时需要和栈的意义1.栈C语言运行时,由汇编来提供条件,主要是需要栈。C语言与栈的关系:C语言的局部变量是用栈来实现的。如果汇编部分没有给C部分预设合理合法的栈地址,那么C代码定义的局部变量就会落空,整个程序
发表于 12-20 07:11
文章内容 该文章主要是总结一些在编写单片机程序及其他相关实践中学到的C语言技巧,面向读者应具有C语言基础。1. 位运算2. 宏定义3. 字符串4. 数据类型4.1 有符号无符号4.2 布尔类型 变量的类型staticconst...
发表于 02-24 06:25
C语言内存运行时不同变量是怎样分配的?怎样验证C语言编译后的内存地址分配是否合理?
发表于 02-25 06:37
c++程序设计语言题解是与Bjarne Stroustrup的《C++程序设计语言》一书配套使用的习题解答,为从《C++程序设计
发表于 09-05 16:00
•119次下载
IC卡的读写程序 (C语言源程序代码)
发表于 03-25 08:56
•352次下载
wince 源程序 (C语言)
发表于 03-25 08:56
•41次下载
⒈ 实验目的⑴ 了解在具体的语言环境下如何编辑、编译、连接和运行一个C程序。⑵ 通过运行简单的C程序,初步了解C源程序的特点。⑶ 掌握C语言数据类型,熟悉如何定义一
发表于 06-21 09:36
•55次下载
按键发音C语言程序
发表于 07-02 14:56
•40次下载
模块化的程序应该是有一个很好的程序结构的。AVR C语言程序有两种用户文件,.c程序文件,.h头文件,程序中编写过程中需要在.c文件中包含.h头文件。初学者往往出现重复包含或者头文
发表于 04-25 15:54
•309次下载
本内容提供了C程序设计语言-最经典的C语言教程的电子教材,欢迎大家下载学习
发表于 07-13 15:55
•2063次下载
书名:C语言程序设计教程 出版社:电子工业出版社 C语言作为一种适用于开发系统软件及应用软件的计算机语言,已经成为计算机程序设计语言的主流语种。本书从培养应用型人才的角
发表于 10-15 11:27
•250次下载
用C语言编写的程序,在屏幕上输出一个心形,并显示“这颗心送给你”
发表于 11-26 15:45
•4次下载
c语言10个经典小程序,帮助大家学习c语言,适合新手的学习
发表于 12-08 17:46
•20次下载
c语言编写,c语言的100个经典程序,单片机的应用,开发利用用
发表于 12-17 11:46
•9次下载
时钟设计程序。时钟设计程序。时钟设计程序【C语言】时钟设计程序【C语言】
发表于 12-28 12:02
•7次下载
LED灯闪烁程序【C语言版】LED灯闪烁程序【C语言版】LED灯闪烁程序【C语言版】
发表于 12-28 17:40
•12次下载
LED闪烁程序【C语言+汇编版】LED闪烁程序【C语言+汇编版】LED闪烁程序【C语言+汇编版】LED闪烁程序【C语言+汇编版】
发表于 12-28 17:40
•8次下载
跑马灯程序【C语言版】跑马灯程序【C语言版】跑马灯程序【C语言版】跑马灯程序【C语言版】
发表于 12-29 10:59
•10次下载
二进制加法程序【C语言版】二进制加法程序【C语言版】二进制加法程序【C语言版】二进制加法程序【C语言版】
发表于 12-29 11:03
•4次下载
按键移位程序【C语言版】按键移位程序【C语言版】按键移位程序【C语言版】按键移位程序【C语言版】
发表于 12-29 11:04
•1次下载
按键键状态显示程序【C语言版2】按键键状态显示程序【C语言版2】按键键状态显示程序【C语言版2】
发表于 12-29 11:05
•2次下载
按键键状态显示程序【C语言版1】按键键状态显示程序【C语言版1】按键键状态显示程序【C语言版1】
发表于 12-29 11:05
•0次下载
LED流水灯程序【C语言版】LED流水灯程序【C语言版】LED流水灯程序【C语言版】LED流水灯程序【C语言版】
发表于 12-29 11:05
•19次下载
LED灯各类程序【C语言】LED灯各类程序【C语言】LED灯各类程序【C语言】LED灯各类程序【C语言】
发表于 12-29 11:03
•22次下载
用C语言编写程序实现通过按键使LED灯周期闪烁。
发表于 03-30 16:54
•10次下载
c程序设计语言,51单片机。
发表于 04-05 15:39
•29次下载
C语言教程之显示程序运行时间,很好的C语言资料,快来学习吧。
发表于 04-25 16:09
•7次下载
C语言程序设计。
发表于 05-16 11:05
•4次下载
51单片机lcd C语言程序,感兴趣的小伙伴们可以瞧一瞧。
发表于 11-11 18:10
•0次下载
其他编程语言——C语言程序设计及应用实例,感兴趣的小伙伴可以看一看。
发表于 11-03 15:50
•47次下载
关于c语言编写的算法程序
发表于 04-09 17:47
•10次下载
通过使用这些例程,您可以实现执行速度比用标准的ansi c语言编写的等效代码快得多。除了提供现成的dsp功能外,这还可以大大缩短你的应用程序开发时间。
发表于 04-10 16:11
•7次下载
本文档的主要内容详细介绍的是C语言教程之C语言基本数据类型与顺序程序设计讲解。在程序运行时,其值不能被改变的量称为常量。常量可分为三种:整型常量,实型常量,字符型常量,符号常量
发表于 10-26 16:48
•3次下载
上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图
发表于 05-29 17:56
•5次下载
C语言目前己成为电子工程师进行单片机系统开发时的常用编程语言。用C语言来编写目标系统软件,会大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充。用C语言编写的应用程序必须经单片机的C语言
发表于 07-07 14:48
•71次下载
C#语言程序设计实用教程免费下载。
发表于 05-24 16:17
•25次下载
C语言程序设计现代方法说明。
发表于 06-01 15:38
•40次下载
是运行速度快、编译效率高、移植性好和可读性强。C语言具有简单的语法结构和强大的处理功能,并可方便地实现对系统硬件的直接操作。C语言支持模块化程序设计结构,支持自顶向下的结构化程序设...
发表于 11-03 21:06
•28次下载
目录:一、五大内存分区二、C语言程序的存储区域三、C语言程序的段四、在C语言的程序中,对变量的使用还有以下注意五、程序中段的使用六、const的使用七、单片机C语言中的data、idata
发表于 11-20 20:36
•11次下载
C语言 | 基于STM32的MPU6050模块程序(主程序)
发表于 12-06 15:06
•33次下载
C语言程序设计.pdf
发表于 12-29 17:36
•13次下载
C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言
发表于 03-22 09:24
•5次下载
c语言键盘扫描程序
4*4
发表于 01-11 19:28
•1.1w次阅读
实验2 : 编写一个以C 语言为基础的DSP程序一.实验目的1.学习用标准C语言编制程序;了解常用的C语言程序设计方法和组成部分。2.学习编制连接命令文件
发表于 03-17 00:13
•2938次阅读
实验3 :编写一个以汇编(ASM)语言为基础的DSP程序一. 实验目的1.学习用汇编语言编制程序;了解汇编语言程序与C语言程序的区别和在设置上的不同。2.了
发表于 03-17 00:14
•6226次阅读
C语言入门教程
引言
C语言是一种广受欢迎且用途广泛的程序设计语言。人们使用它编写计算机程序。因为C功能强、效率高,所以全世界的程序员都喜欢用它。如果您
发表于 07-29 10:25
•6894次阅读
基于模式的静态代码分析、运行时内存监测、单元测试以及数据流分析等软件验证威廉希尔官方网站
是查找嵌入式C语言程序/软件
发表于 11-23 10:03
•1038次阅读
1 C51语言程序设计\技巧 C语言 是一种高级程序设计语言,它提供了十分完备的规范化流程控制结构。因此采用C51语言设计单片机应用系统程序时,首先要尽可能地采用结构化的程序设计
发表于 05-17 14:02
•5346次阅读
C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛。
发表于 01-03 10:51
•3168次阅读
众所周知,相比于其他编程语言,C语言在编写嵌入式编程中有着绝对的优势。但它总也有缺点的:它的时序性比较差,不容易编写精准的延时。而在编写嵌入系统驱动程序时,常常需要比较精确的软件延时,这使得C语言的“劣势”
发表于 05-23 16:33
•1268次阅读
代码。此时,每个C文件所对应的二进制代码是独立的。由于工程是一个系统,所以需要将所有的C文件二进制代码链接到一起,形成一个工程的可执行文件。一般程序的运行流程包括编辑、编译、连接、运行四个环节,运行C语言时也需经过
发表于 11-07 15:05
•1.1w次阅读
前几天有个学员咨询一个程序设计的问题,程序的控制要求如下:需要控制5台电机的运行,每台电机运行时需要记录运行时间,电机启动运行时,根据记录的运行时间,从小到大,每个2s依次启动电机的运行。
发表于 07-19 08:57
•5421次阅读
LabVIEW是一种程序开发环境,由美国国家仪器(NI)公司研制开发,类似于C和BASIC开发环境,但是LabVIEW与其他计算机语言的显著区别是:其他计算机语言都是采用基于文本的语言产生代码,而LabVIEW使用的是图形化编辑语言G编写程序
发表于 07-01 08:22
•4597次阅读
C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作 为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机 硬件的应用程序。
发表于 09-29 16:54
•1290次阅读
C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作 为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机 硬件的应用程序。
发表于 10-08 10:07
•304次阅读
GET "libhdr"是包含标准库,LET start() = VALOF是程序运行时要调用的第一个函数。空括号()表示函数不需要任何参数,VALOF表示函数有返回值。
发表于 11-10 09:03
•328次阅读
评论