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

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

3天内不再提示

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

汽车电子技术 来源:typedef 作者:typedef 2023-02-21 09:59 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

目录

  • 简述
  • C语言由来
    • BCPL语言及代码
    • B语言以及代码
    • C语言
  • 编程语言
  • 机器语言
  • 汇编语言
  • 高级语言
  • C为何快速

简述

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

C语言由来

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

BCPL语言以及代码

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

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

GET "libhdr"
LET start() = VALOF
{ FOR i = 1 TO 5 DO writef("fact(%n) = %i4*n", i, fact(i))
  RESULTIS 0
}
AND fact(n) = n=0 -> 1, n*fact(n-1)

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

FOR i = 1 TO 5 DO是一个从1到5的循环。writef是字符格式化字符串函数,用来输出将i替换%nfact(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 defined function

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

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

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之间。

/* The following function will print a non-negative number, n, to
  the base b, where 2<=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

void printn(int n, char b) {
  char a;
  if(a=n/b) {
    printn(a, b);
  }
  putchar(n%b + '0');
}

int main(int argc ,char **argv) {
  printn(8, 2);
  return 0;
}

Terminal: 1000

跟B语言非常接近了吧。

编程语言

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

图片

机器语言

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

汇编语言

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

高级语言

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

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

C为何快速

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

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

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

END

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

    关注

    183

    文章

    7642

    浏览量

    144553
  • 编程语言
    +关注

    关注

    10

    文章

    1959

    浏览量

    38884
  • CPL
    CPL
    +关注

    关注

    0

    文章

    13

    浏览量

    10932
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

    都说C语言编写的程序执行效率比较高,那么到底在哪里,我们一块来学习学习。
    发表于 11-04 09:04 1291次阅读

    嵌入式工程师怎么写出效率高C语言程序

    作为嵌入式工程师,怎么写出效率高、思路清晰的C语言程序呢?
    发表于 07-03 09:34 566次阅读

    公式节点的效率高吗?

    如题,完成一个功能, 公式节点效率高,还是用VI函数效率高? 相信labview是用C++写的程序.
    发表于 11-20 11:30

    关于主函数whil循环调用多个函数执行,和直接代码执行,哪个效率高的问题。

    主函数while中多段代码,是将代码封装成多个函数,去调用多个函数执行,还是直接贴代码在主函数while中运行 哪个效率高?是不是调用了很多个函数 导致慢了,高手从编译 运行角度解读下
    发表于 06-24 10:14

    真心请教,a=b=1和a=1;b=1;这两种写法在c语言执行起来哪个效率高

    小白我真心请教,a=b=1和a=1;b=1;这两种写法在c语言执行起来哪个效率高?求高手们赐教啊
    发表于 01-01 12:30

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

    的事那么效率。下面说说如何提高C语言程序的执行效率。1、尽量避免调用延时函数没有带操作系统的
    发表于 07-20 06:39

    MCS的C语言和标准C语言的区别

    MCS的C语言和标准C语言的区别MC9S12的C语言与标准C
    发表于 07-20 07:06

    解释型语言与编译型语言以及解释器与编译器之间的区别是什么

    类别优点缺点应用场合代表语言解释型 语言运行的时候将程序翻译成机器语言跨平台,开发效率高执行速度
    发表于 02-28 12:51

    有源pfc效率高还是无源效pfc效率高

    有源pfc效率高还是无源效pfc效率高
    发表于 10-07 09:01

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

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

    DN303-闪光灯电容充电器充电效率高、电池耗电量低

    DN303-闪光灯电容充电器充电效率高、电池耗电量低
    发表于 05-15 19:57 12次下载
    DN303-闪光灯电容充电器充电<b class='flag-5'>快</b>、<b class='flag-5'>效率高</b>、电池耗电量低

    C/C++灵魂拷问:++i与i++哪个执行效率高?有什么区别?

    当然,就C语言代码来看,i++和++i都只有一行,看起来似乎二者的执行效率一样了?其实不是的,在学习C
    的头像 发表于 03-31 14:04 2365次阅读

    C语言灵魂拷问: ++i为何比i++执行效率高

    当然,就C语言代码来看,i++ 和 ++i 都只有一行,看起来似乎二者的执行效率一样?其实不是的,在学习C
    的头像 发表于 03-07 11:02 1735次阅读

    C语言编写程序执行效率高的原因是什么?

    机器语言是一种指令集的体系,它是用二进制代码表示的语言,是计算机唯一可以直接识别和执行语言,它具有计算机可以直接执行、简洁、运算速度
    发表于 10-23 10:18 1194次阅读
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>编写程序<b class='flag-5'>执行</b><b class='flag-5'>效率高</b>的原因是什么?

    C语言运行环境是什么

    C语言运行环境(C language runtime environment)是指在执行C
    的头像 发表于 11-27 16:13 5162次阅读