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

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

3天内不再提示

C语言编写的程序执行效率到底高在哪里

strongerHuang 来源:typedef 作者:typedef 2022-11-10 09:03 次阅读

都说C语言编写的程序执行效率比较高,那么到底高在哪里,我们一块来学习学习。

C语言由来

C语言源自于BCPL、B两种语言。

BCPL语言以及代码

1967年,剑桥大学的马丁·理察德(Martin Richards)以CPL编程语言为基础,发明了BCPL(Basic Combined Pogramming Language)编程语言。

我们在看一个用BCPL语言编写的计算阶乘的功能,代码如下:

GET"libhdr"
LETstart()=VALOF
{FORi=1TO5DOwritef("fact(%n)=%i4*n",i,fact(i))
RESULTIS0
}
ANDfact(n)=n=0->1,n*fact(n-1)

GET "libhdr"是包含标准库,LET start() = VALOF是程序运行时要调用的第一个函数。空括号()表示函数不需要任何参数,VALOF表示函数有返回值。

FOR i = 1 TO 5 DO是一个从1到5的循环。writef是字符格式化字符串函数,用来输出将i替换%n、fact(i)替换%i4格式化之后的字符串。*n表示换行,RESULTIS 0是返回值,用来告诉系统函数执行成功。

AND fact(n) =介绍了函数fact的定义,通过接受一个参数来实现n的阶乘。

n=0 -> 1, n*fact(n-1)则是阶乘的实现,当n等于0时候,返回1(0的阶乘是1),当n不等于0的时候则返回n*fact(n-1),

AND原文是下面这样说的,如下:

The word AND causes fact to available to the previously definedfunction

我的个人理解是支持嵌套,那么你认为呢?

当上述功能执行后将会在终端有如下输出:

fact(1)=1
fact(2)=2
fact(3)=6
fact(4)=24
fact(5)=120

BCPL用户指南:https://www.cl.cam.ac.uk/~mr10/bcplman.pdf

B语言以及代码

肯·汤普逊(Ken Thompson)简称“ken”,在贝尔实验室工作期间设计和实现了Unix操作系统。他基于BCPL创造了B语言。

同样的,我们来看一个用B语言实现进制转换功能。输入一个n转换为b进制,其中b在2和10之间。

/*Thefollowingfunctionwillprintanon-negativenumber,n,to
thebaseb,where2<=b<=10,  This routine uses the fact that
  in the ANSCII character set, the digits O to 9 have sequential
  code values.  */

printn(n,b) {
 extrn putchar;
 auto a;

 if(a=n/b) /* assignment, not test for equality */
  printn(a, b); /* recursive */
 putchar(n%b + '0');
}

代码出处:https://www.bell-labs.com/usr/dmr/www/kbman.html

C语言

在1972年,美国贝尔实验室的丹尼斯·里奇(D.M.Ritchie)在B语言的基础上设计出了新的言,他取BCPL的第二个字母作为这种语言的名字,这就是C语言的由来。

以下是用C语言实现的进制转换功能。

#include

voidprintn(intn,charb){
chara;
if(a=n/b){
printn(a,b);
}
putchar(n%b+'0');
}

intmain(intargc,char**argv){
printn(8,2);
return0;
}

Terminal:1000

跟B语言非常接近了吧。

编程语言

机器语言是二进制文件,汇编语言是符号语言,再往汇编之上是高级语言。下图是C编写的源文件,经过汇编和链接生成的汇编文件以及二进制文件。

6a8f925c-6090-11ed-8abf-dac502259ad0.png

机器语言

机器语言是一种指令集的体系,它是用二进制代码表示的语言,是计算机唯一可以直接识别和执行的语言,它具有计算机可以直接执行、简洁、运算速度快等优点,这是一件十分繁琐的工作。编写程序花费的时间往往是实际运行时间的几十倍或几百倍,而且直观性比较差,容易出错,程序的检查和调试都比较困难。

汇编语言

为了解决机器语言难以理解和记忆的缺点,于是就出现了汇编语言。用易于理解和记忆的名称和符号表示机器指令中的操作码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言;于是汇编语言亦称为符号语言。

高级语言

高级语言又主要是相对于汇编语言(机器语言)而言的,它是高度封装了的编程语言;是较接近自然语言和数学公式的编程,基本脱离了机器的硬件系统,用人们更易理解的方式编写程序。

例如java,c,c++C#python都是高级语言。

C为何快速

越高级的语言,越人性化,机器负担就重。因为机器帮你处理了常见的问题,需要一些额外开销。而C语言是一门非常干净的语言,相当于裸奔,被设计之初就将速度大于安全之上,它不会检查数组索引是否会越界,不会检查内存是否泄漏,也不会检查指针是否是野指针。

在制定C标准时指出C代码是能够可移植的,但是如果要为了更快的执行效率,可以牺牲可移植性。C完全相信程序员,不会阻止程序员要做的事情。

C语言经过编译优化生成的机器码和和直接写汇编生成的机器码是相当的,所以C非常高效。






审核编辑:刘清

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

    关注

    0

    文章

    13

    浏览量

    15261
  • C语言
    +关注

    关注

    180

    文章

    7530

    浏览量

    128722
  • CPL
    CPL
    +关注

    关注

    0

    文章

    13

    浏览量

    10659

原文标题:C语言效率高,是有原因的

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何提高单片机C语言程序执行效率

    首先什么是执行效率。我们平常所说的执行效率就是使用相同的算法在相同输入条件下完成相同计算所产生的系统开销,目前来说一般会更多关注执行时间方面
    发表于 03-06 18:52 1704次阅读

    为什么C语言执行效率高,运行快?

    都说C语言编写程序执行效率比较高,那么到底在哪里
    发表于 11-04 09:04 965次阅读

    Go开发语言的优势在哪里

    进程。对于Go语言,一直存在着争议,很多人善于用Go语言进行开发,但不是所有人都喜欢Go语言,那么Go语言的存在有什么价值?Go语言的优势
    发表于 03-22 15:04

    哪里可以在源屏幕中编写程序

    使用Mahcine语言对STM8S Discovery进行编程吗? 我在哪里可以编写程序在源屏幕中在哪里? 谢谢以上来自于谷歌翻译以下为原文 Dear comunty, I'm a
    发表于 07-12 15:35

    请问不同编程语言的区别到底在哪里

    不同编程语言的区别到底在哪里?​C语言、python、ruby、java...撇开前端开发语言不谈,但论这些后端
    发表于 06-02 06:44

    利用C语言编写PIC单片机程序的方法是什么

    PI C单片机程序的方法,本刊特推出《PI C 单片机C 语言程序设计》系列连载文章。文中给出的
    发表于 07-15 08:40

    如何提高C语言程序执行效率

    的事那么效率。下面说说如何提高C语言程序执行效率
    发表于 07-20 06:39

    那么头文件和c文件的区别在哪里呢?

    不清楚到底要将代码写在哪里。那么头文件和c文件的区别在哪里呢?这么来解释,头文件就很像是一本书的目录,而c文件是具体的内容(具体的函数、方法
    发表于 11-08 07:05

    使用c语言给单片机编写程序在运行的时候if语句运行的快还是switch语句执行的速度快?

    请问使用c语言给单片机编写程序在运行的时候if语句运行的快,还是switch语句执行的速度快?在优化之前的人写的
    发表于 11-08 06:55

    c语言编写程序没错,组建没错为什么就是无法执行

    c语言编写程序没错,组建没错,为什么就是无法执行
    发表于 11-09 07:26

    iPhone8到底在哪里?为何敢买那么贵?又为何还有那么多人买?

    都知道苹果公布iPhone8的价格超贵,1000多美元的价格着实吓坏了宝宝,那么你知道苹果这次的手机到底会贵在哪里么?以下几点让您清楚苹果iPhone8到底在哪里
    发表于 02-14 09:47 2501次阅读

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

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

    “缺芯”之痛,到底在哪里

    缺芯”之痛,到底在哪里?谈及这个问题,天数智芯CEO李云鹏认为,除了有原创知识产权缺乏的因素,主要原因还是中国缺少专业的技术人才。在模拟电路设计方面,基本上没有华人的参与,绝大多数此类人才都在美国。在美国有十多年学习、工作经历的李云鹏对此感触颇深。
    的头像 发表于 06-13 10:10 5607次阅读

    如何提高单片机程序执行效率

    首先什么是执行效率。我们平常所说的执行效率就是使用相同的算法在相同输入条件下完成相同计算所产生的系统开销,目前来说一般会更多关注执行时间方面
    发表于 02-11 15:42 5次下载
    如何提高单片机<b class='flag-5'>程序</b><b class='flag-5'>执行</b><b class='flag-5'>效率</b>

    LoRa到底“神”在哪里

    点击上方"蓝字"关注泽耀科技在选择诸多无线传输的模块和产品中,我们总是能听到或看见:XXX模块采用了LoRa技术,可以低功耗远距离通信...为何“LoRa”的出镜率会如此之高?它有着哪些独到的特点和优势让人们欲罢不能?本期我们便带大家走近LoRa,看看它到底“神”在哪里.
    的头像 发表于 06-14 10:14 503次阅读
    LoRa<b class='flag-5'>到底</b>“神”<b class='flag-5'>在哪里</b>?