目录

  • 简述
  • 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, tothe base b, where 2<=b<=10,  This routine uses the fact thatin the ANSCII character set, the digits O to 9 have sequentialcode 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<stdio.h>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非常高效。

原文链接

链接: 为什么C语言执行效率高,运行快

为什么C语言执行效率高,运行快?相关推荐

  1. 【Groovy】Groovy 动态语言特性 ( Groovy 语言与 Java 语言执行效率对比 | 以动态特性编译的 Groovy 类 | 以静态特性编译的 Groovy 类 )

    文章目录 一.以动态特性编译的 Groovy 类 二.Groovy 语言与 Java 语言执行效率对比 三.以静态特性编译的 Groovy 类 一.以动态特性编译的 Groovy 类 Groovy 类 ...

  2. StringBuilder和StringBuffer哪个线程安全?执行效率高?

    StringBuilder是线程不安全的,执行效率高 StringBuffer是线程安全的,加了synchronized同步关键字,执行效率高

  3. C语言执行效率如何保证,看这一文就够了!

    来自公众号:嵌入式ARM 嵌入式开发基本都会选择C语言 这是因为C语言有出色的可移植性 能在多种不同体系结构的软/硬平台上运行 虽然代码的复用性差 代码的维护性差 扩展性很差 但,C语言简洁紧凑 使用 ...

  4. 【C 语言】数组作为参数退化为指针问题 ( 问题描述 | 从编译器角度分析该问题 | 出于提高 C 语言执行效率角度考虑 | 数组作为参数的推荐方案 )

    文章目录 一.问题描述 二.从编译器角度分析该问题 三.数组作为参数的推荐方案 一.问题描述 将 数组 作为 函数参数 , 传递时会 退化为指针 ; 数组的首地址 , 变为指针地址 , 函数中无法判定 ...

  5. python语言开发效率高吗_12种高效率热门编程语言,你会用几个?

    纯手工打造每一篇开源资讯与技术干货,数十万程序员和Linuxer已经关注.导读 编程语言不仅仅面向程序员.如果你是网络工程师.系统管理员.存储管理员或其他基础设施专业人员,知道一种(或两三种)编程语言 ...

  6. python语言开发效率高吗_Python 的开发效率真的比 Java高吗?

    几个例子. 爬虫领域,几年前就用Scrapy抓百度,新浪,股吧等各种东西. 五分钟写好一个小爬虫,爽到暴有没有?当年我就是靠教人写爬虫...才骗到小妹妹跟我约会的. 文本处理,在服务器端处理日志,或者 ...

  7. python和c语言哪个效率高_Python运行效率优于C语言的功能简介

    C语言和Python运行效率你在实际应用的过程中前者与后者你更喜欢应用那个?本文要介绍的是C语言与Python运行效率对比,突出前后者的不同以及在相关应用过程中的相关功能的介绍.以下是内容介绍. Py ...

  8. x = x+1,x+=1,x++那个的执行效率高

    *************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com ****** ...

  9. python和c语言哪个效率高_C语言和Python哪个更容易学?

    C语言和Python哪个更容易学? 发布时间:2020-06-05 20:46:38 来源:亿速云 阅读:157 C语言和Python哪个更容易学?针对这个问题,今天小编总结这篇有关C语言和Pytho ...

  10. switch最大选项数目_随时随地学习C语言之3—if和switch哪个效率高?

    之前学习C语言的时候,我经常有一个疑问,既然有if-else if-else结构的多分支选择语句,C语言为何还要制定switch这种多分支选择语句呢?直到两年前在分析ARM平台C语言反汇编代码的时候, ...

最新文章

  1. [luogu3760 TJOI2017] 异或和(树状数组)
  2. Android中removeCallbacks失效原因
  3. C/C++基础知识:函数指针和指针函数的基本概念
  4. 企业内部网的IP解析问题
  5. (18) Node.js npm包管理工具
  6. 日记 [2008年03月23日]不编译内核给iptables增加模块
  7. python中类里self_Python类中的self到底是干啥的
  8. android手机无分区无法刷机,adb sideload 刷机教程:当你手机无法开机,内存里没有ROM时......
  9. hadoop 爬虫_这些不用编程的爬虫工具,你一定要知道
  10. SQL 查询分析器操作(修改、添加、删除)表及字段等
  11. 详解:字符转换函数(大写转小写,小写转大写)
  12. 洛谷P1039侦探推理题解--zhengjun
  13. 《C语言程序设计第三版》(苏小红)习题九 课后答案
  14. imac打开terminal终端器
  15. Mathtype7.4 嵌入至 Office 365
  16. 打印一只Nyan Cat(彩虹猫)(C++)3.0[多色版]
  17. AtCoder Beginner Contest 234 G - Divide a Sequence
  18. linux的地址随机化ASLR,[翻译]Linux (x86) Exploit 开发系列教程之六(绕过ASLR - 第一部分)...
  19. 绿色版本 VS2019的MSDN
  20. 【python技能树】python模块管理

热门文章

  1. 这7个素材网站送你参考,一部手机就可以做影视剪辑,0基础抖音涨粉
  2. 两部手机怎样才能把数据都传过来_两个手机如何互传照片、文件 ,教你四大绝招...
  3. jQuery 样式操作
  4. WPS演示常用快捷键大全
  5. 单龙芯3A3000-7A1000PMON研究学习-(25)撸起袖子干-再来一杯代码7
  6. PyS60记事本源码
  7. Zabbix3.4监控Linux主机CPU温度
  8. solaris 命令大全
  9. 说说怎么保证线程安全
  10. 华为P9 回退android6.0,华为P9 Plus从EMUI5.0 版本回退EMUI 4.1官方稳定版本