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

news2024/11/29 3:45:23

目录

  • 简述
  • 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<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语言执行效率高,运行快

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/3467.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

django csrfMiddleware的一些理解跨站和跨域

术语 术语解释备注跨域两个 URL 的“协议主机名端口”3者只要有一个不一致http://www.taobao.com/和https://www.taobao.com/跨站两个 URL 的 eTLD1 不相同a.github.io 和 b.github.ioeTLDeffective top level domain &#xff08;有效顶级域名&#xff09;.com、.co.uk、.git…

第六节:数组的定义与使用【java】

目录 &#x1f4c3;1. 数组的基本概念 1.1 为什么要使用数组 1.2 什么是数组 1.3 数组的创建及初始化 1.4 数组的使用 &#x1f392;2. 数组是引用类型 2.1 初始JVM的内存分布 2.2 基本类型变量与引用类型变量的区别 2.3 认识 null 2.4 再谈引用变量 &#x1f4d6;3. …

Redis的RDB持久化配置以及数据恢复

文章目录Redis的RDB持久化配置以及数据恢复配置RDB持久化机制RDB持久化机制的工作流程基于RDB持久化机制的数据恢复Redis的RDB持久化配置以及数据恢复 配置RDB持久化机制 在 redis 的配置文件中找到如下内容&#xff1a; 以 save 60 10000 为例&#xff0c;表示每隔 60s&…

Springboot 整合与文件配置

哈喽~大家好&#xff0c;这篇看看Springboot 整合与文件配置。 &#x1f947;个人主页&#xff1a;个人主页 &#x1f948; 系列专栏&#xff1a;【Java框架】 &#x1f949;与这篇相关的文章&#xff1a; 【JAVAEE框架】MyBatis与Spring的整合&#xff0…

Unity-huatuo热更新调研

文章目录1. 相关资料2. 环境准备2.1 项目和编辑器版本2.2 安装huatuo插件2.3 在build settings里面勾选Export Project2.4 导出Android studio工程3. 验证热更新3.1 更改读取目录3.2 运行android apk3.3 热更新1. 相关资料 bilibili视频&#xff1a;https://www.bilibili.com/…

学院打卡第十四天

今天是一道困难题&#xff0c;难得有困难题&#xff01;&#xff01; 如题&#xff1a; 但是这个困难题感觉也不是很”困难“&#xff01;&#xff01;&#xff01; 算法思想&#xff1a; 第一感觉就是利用栈的思想&#xff0c;这种题做多了&#xff0c;一看见就是想到栈&…

2021年上半年软件设计师下午真题及答案解析(三)

阅读下列说明和图&#xff0c;回答问题1至问题3&#xff0c;将解答填入答题纸的对应栏内。 【说明】 某中医医院拟开发一套线上抓药APP&#xff0c;允许患者凭借该医院医生开具的处方线上抓药&#xff0c;并提供免费送药上门服务。该系统的主要功能描述如下&#xff1a; &#…

Kotlin编程实战——概述(01)

一 概述 Kotlin用于服务器开发Kotlin 进行 Android 开发Kotlin 用于 JavaScript 开发Kotlin 用于原生开发Kotlin 用于数据科学协程多平台 二 Kotlin用于服务器开发 2.1 原因 表现力可伸缩性互操作性迁移迁移工具学习曲线 2.2 Kotlin 进行服务器端开发的框架 Spring、Vert.…

Premiere 出现“该级别的帧大小/帧速率无效。请减小视频范围或帧速率,或者增加配置文件和级别,然后重试”的解决办法

有时候我们需要制作一定纵横比的视频&#xff0c;比如设置画面大小为1080(水平)1920(垂直)的竖屏尺寸&#xff0c;但是最近我导出视频时发现了 “该级别的帧大小/帧速率无效。请减小视频范围或帧速率&#xff0c;或者增加配置文件和级别&#xff0c;然后重试” 这个问题&#x…

使用插值法公式组成数字电路进行计算的计算机

使用插值法公式组成数字电路进行计算的计算机 使用插值法公式组成数字电路进行计算的计算机是一种可以使用插值法计算积分值&#xff0c;导数值&#xff0c;函数值的数字计算机&#xff0c;它由按键&#xff0c;液晶显示器&#xff0c;中央处理器组成。按键输入的程序保存在磁带…

【CUDA编程】CUDA内存模型

文章目录1. 内存结构2. GPU device内存2.1 寄存器(Registers)2.2 本地内存(Local Memory)2.3 共享内存(Shared Memory)2.4 常量内存(Constant Memory)2.5 纹理内存(Texture Memory)2.6 全局内存(Global Memory)3. CPU Host内存1. 内存结构 在CUDA中可编程内存的类型有&#xf…

文件管理的功能

文章目录什么是文件文件的属性文件内部的数据如何组织起来文件之间应该如何组织起来操作系统应该向上提供哪些功能从上往下看&#xff0c;文件应该如何存放在外存其他需要由操作系统实现的文件管理功能什么是文件 文件就是一组有意义的信息/数据集合 文件的属性 文件名&#x…

万字手撕AVL树 | 上百行的旋转你真的会了吗?【超用心超详细图文解释 | 一篇学会AVL】

说在前面 今天这篇博客&#xff0c;是博主今年以来最最用心的一篇博客。我们也很久没有更新数据结构系列了&#xff0c;几个月前博主用心深入的学习了这颗二叉平衡搜索树&#xff0c;博主被它的查找效率深深吸引。 AVL树出自1962年中的一篇论文《An_algorithm_for_the_organi…

计算机毕业设计(附源码)python职业高中智慧教学系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;我…

ASCII纯文本绘制流程图

我们使用纯文本写代码&#xff0c;有了Markdown又可以使用纯文本写文档&#xff0c;那么图片&#xff0c;能不能使用纯文本描述呢&#xff1f; Text Flow是什么&#xff1f; Text Flow&#xff1a;一个强大的在线ASCII流程图绘制工具&#xff0c;是程序员大佬们很喜爱的制作流…

【AI绘图】咒术师的评级指南

成为咒术师之路 python版本要选用3.9.7 C盘或系统缓存目录预留5G空间 咒术师评级 以下内容仅供参考。。 三级咒术师 理解咒言的使用&#xff0c;正向咒言&#xff0c;逆向咒言&#xff0c;构图要素的表达 二级咒术师 能够对咒物做后期调整&#xff0c;校正手部 一级咒术师…

Redis

1.概念:redis是一款高性能的NOSQL系列的非关系型数据库 关系型数据库&#xff1a;数据之间有关联关系&#xff0c;数据存储在硬盘的文件上 非关系型数据库&#xff1a;数据之间没有关联关系&#xff0c;数据存储在内存中 是一款用C语言开发…

猿创征文|一文吃透JAVA初学者的开发工具

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;乐趣国学的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;CSDN活动专…

【算法】网络最大流问题,三次尝试以失败告终

文章目录开始基本思路&#xff1a;“反悔”机制干活尝试一&#xff1a;深度优先搜索尝试二&#xff1a;少走弯路尝试三&#xff1a;最短增广路径&#xff0c;广度优先还是没ac记两个小bug1. 数组越界2. 写错变量名小结最后一个版本的代码&#xff08;C&#xff09;定义类与函数…

谷雨妹子要出国

文 / 谷雨&#xff08;微信公众号&#xff1a;王不留&#xff09; 作为出差在外的实施团队中的唯一一位女生&#xff0c;我可以独享一个单间&#xff0c;晚上的备考时候不会受影响&#xff0c;心里倒有点美嗞嗞的。 目前工作状态是 996&#xff08;早上九点到晚上九点&#xf…