(一)C语言概述

article/2025/10/13 22:53:39

本篇介绍C语言起源、编译、存储层次。

    • 诞生
    • 特点
    • 编译
    • 存储层次

诞生

  • 简单介绍
    C语言诞生于美国的贝尔实验室,由D.M.Ritchie以B语言为基础发展而来,在它的主体设计完成后,Thompson和Ritchie用它完全重写了UNIX,且随着UNIX的发展,c语言也得到了不断的完善。为了利于C语言的全面推广,许多专家学者和硬件厂商联合组成了C语言标准委员会,并在之后的1989年,诞生了第一个完备的C标准,简称“C89”,也就是“ANSI c”,截至2020年,最新的C语言标准为2017年发布的 “C17”。
    C语言之所以命名为C,是因为C语言源自Ken Thompson发明的B语言,而B语言则源自BCPL语言。

  • 发展历程

在这里插入图片描述

特点

  • 简洁的语言
    C语言包含的各种控制语句仅有9种,关键字也只有32 个。

  • 具有结构化的控制语句
    C语言是一种结构化的语言,提供的控制语句具有结构化特征,如for语句、if⋯else语句和switch语句等。可以用于实现函数的逻辑控制,方便面向过程的程序设计。

  • 丰富的数据类型
    C语言包含的数据类型广泛,不仅包含有传统的字符型、整型、浮点型、数组类型等数据类型,还具有其他编程语言所不具备的数据类型,其中以指针类型数据使用最为灵活,可以通过编程对各种数据结构进行计算。

  • 丰富的运算符
    C语言包含34个运算符,它将赋值、括号等均是作运算符来操作,使C程序的表达式类型和运算符类型均非常丰富。

  • 可对物理地址进行直接操作
    C语言允许对硬件内存地址进行直接读写,以此可以实现汇编语言的主要功能,并可直接操作硬件。C语言不但具备高级语言所具有的良好特性,又包含了许多低级语言的优势,故在系统软件编程领域有着广泛的应用。

  • 代码具有较好的可移植性
    C语言是面向过程的编程语言,用户只需要关注所被解决问题的本身,而不需要花费过多的精力去了解相关硬件,且针对不同的硬件环境,在用C语言实现相同功能时的代码基本一致,不需或仅需进行少量改动便可完成移植,这就意味着,对于一台计算机编写的C程序可以在另一台计算机上轻松地运行,从而极大的减少了程序移植的工作强度。

  • 可生成高质量、目标代码执行效率高的程序
    与其他高级语言相比,C语言可以生成高质量和高效率的目标代码,故通常应用于对代码质量和执行效率要求较高的嵌入式系统程序的编写。

编译

  • 目的
    编译是利用编译程序从源语言编写的源程序产生目标程序的过程,就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。

  • 过程
    在这里插入图片描述

    • 词法分析
      词法分析的任务是对由字符组成的单词进行处理,从左至右逐个字符地对源程序进行扫描,产生一个个的单词符号,把作为字符串的源程序改造成为单词符号串的中间程序。执行词法分析的程序称为词法分析程序或扫描器。
      源程序中的单词符号经扫描器分析,一般产生二元式:单词种别;单词自身的值。单词种别通常用整数编码,如果一个种别只含一个单词符号,那么对这个单词符号,种别编码就完全代表它自身的值了。若一个种别含有许多个单词符号,那么,对于它的每个单词符号,除了给出种别编码以外,还应给出自身的值。
      词法分析器一般来说有两种方法构造:手工构造和自动生成。手工构造可使用状态图进行工作,自动生成使用确定的有限自动机来实现。

    • 语法分析
      编译程序的语法分析器以单词符号作为输入,分析单词符号串是否形成符合语法规则的语法单位,如表达式、赋值、循环等,最后看是否构成一个符合要求的程序,按该语言使用的语法规则分析检查每条语句是否有正确的逻辑结构,程序是最终的一个语法单位。编译程序的语法规则可用上下文无关文法来刻画。
      语法分析的方法分为两种:自上而下分析法和自下而上分析法。自上而下就是从文法的开始符号出发,向下推导,推出句子。而自下而上分析法采用的是移进归约法,基本思想是:用一个寄存符号的先进后出栈,把输入符号一个一个地移进栈里,当栈顶形成某个产生式的一个候选式时,即把栈顶的这一部分归约成该产生式的左邻符号。

    • 中间代码
      中间代码是源程序的一种内部表示,或称中间语言。中间代码的作用是可使编译程序的结构在逻辑上更为简单明确,特别是可使目标代码的优化比较容易实现中间代码,即为中间语言程序,中间语言的复杂性介于源程序语言和机器语言之间。中间语言有多种形式,常见的有逆波兰记号、四元式、三元式和树。

    • 代码优化
      代码优化是指对程序进行多种等价变换,使得从变换后的程序出发,能生成更有效的目标代码。所谓等价,是指不改变程序的运行结果。所谓有效,主要指目标代码运行时间较短,以及占用的存储空间较小。这种变换称为优化。
      有两类优化:一类是对语法分析后的中间代码进行优化,它不依赖于具体的计算机;另一类是在生成目标代码时进行的,它在很大程度上依赖于具体的计算机。对于前一类优化,根据它所涉及的程序范围可分为局部优化、循环优化和全局优化三个不同的级别。

    • 目标代码
      目标代码生成是编译的最后一个阶段。目标代码生成器把语法分析后或优化后的中间代码变换成目标代码。目标代码有三种形式:
      ① 可以立即执行的机器语言代码,所有地址都重定位;
      ② 待装配的机器语言模块,当需要执行时,由连接装入程序把它们和某些运行程序连接起来,转换成能执行的机器语言代码;
      ③ 汇编语言代码,须经过汇编程序汇编后,成为可执行的机器语言代码。
      目标代码生成阶段应考虑直接影响到目标代码速度的三个问题:一是如何生成较短的目标代码;二是如何充分利用计算机中的寄存器,减少目标代码访问存储单元的次数;三是如何充分利用计算机指令系统的特点,以提高目标代码的质量。

    • 表格管理
      编译过程中源程序的各种信息被保留在种种不同的表格,编译各阶段的工作都涉及到构造、查找、或更新有关的表格。
      编译程序的公共辅助部分。对源程序中的各种量进行管理,登记在相应的表格。编译程序处理时通过查表得到所需的信息。

    • 出错处理
      如果编译过程中发现源程序有错误,编译程序应报告错误的性质和错误的发生的地点,并且将错误所造成的影响限制在尽可能小的范围内,使得源程序的其余部分能继续被编译下去,有些编译程序还能自动纠正错误,这些工作由错误处理程序完成。
      需要注意的是,一般上编译器只做语法检查和最简单的语义检查,而不检查程序的逻辑。

存储层次

  • 定义
    存储层次是在计算机体系结构下存储系统层次结构的排列顺序。每一层于下一层相比都拥有较高的速度和较低延迟性,以及较小的容量。大部分现今的中央处理器的速度都非常的快。大部分程序工作量需要存储器访问。由于高速缓存的效率和存储器传输位于层次结构中的不同档次,所以实际上会限制处理的速度,导致中央处理器花费大量的时间等待存储器I/O完成工作。

  • 简介

    • 存储系统是指计算机中由存放程序和数据的各种存储设备、控制部件及管理信息调度的设备(硬件)和算法(软件)所组成的系统。计算机的主存储器不能同时满足存取速度快、存储容量大和成本低的要求,在计算机中必须有速度由慢到快、容量由大到小的多级层次存储器,以最优的控制调度算法和合理的成本,构成具有性能可接受的存储系统。存储系统的性能在计算机中的地位日趋重要,主要原因是:①冯诺伊曼体系结构是建筑在存储程序概念的基础上,访存操作约占中央处理器(CPU)时间的70%左右。②存储管理与组织的好坏影响到整机效率。③现代的信息处理,如图像处理、数据库、知识库、语音识别、多媒体等对存储系统的要求很高 。

    • 对于通用计算机而言,存储层次分为四层:CPU寄存器。高速缓存、主存和辅存。对于CPU 寄存器,CPU 可以再一个时钟周期内访问它们。接下来是一个或者多个小型到中型的基于 SRAM 的高速缓存存储器,可以再几个 CPU 时钟周期内访问它们。然后是一个大的基于 DRAM 的主存,可以在几十或者几百个时钟周期内访问它们。接下来是慢速但是容量很大的本地磁盘。存储器层次结构的核心是,对于每个 k,位于 k 层的更快更小的存储设备作为位于 k+1 层的更大更慢的存储设备的缓存。也就是说,层次结构中的每一层都缓存来自较低一层的数据对象。例如,本地磁盘作为通过网络从远程磁盘取出文件的缓存,以此类推知道 CPU 寄存器。

    • 对于计算机系统中配置的存储器,归结起来有三个主要的参数要求:容量大,速度快,价格低。存储器的易失性也是计算机存储器的一个重要指标,一般来讲,速度高的存储器,每位价格也高,因此容量不能太大。所以对单一的存储器部件来说,大容量、高速度、低价格三者是不能同时满足的。为了解决这个难题,在现代计算机系统中采用了存储器分层结构,这样就不会仅仅依赖于某一个存储部件或技术了。任意高速存储设备都可以作为低速存储设备的缓存,也是出现存储层次主要原因之一。

  • 特点
    在这里插入图片描述

    • 在存储层次中,存储系统的基本要求是存储容量大、存取速度快和成本低。为同时满足上述三个要求,计算机需有速度由慢到快,容量由大到小的多层次存储器,以最优的控制调度算法和合理的成本,构成存储系统。

    • 在图4-1中,存储层次由上到下呈现出以下特点:每位的价格越来越低,速度越来越慢,容量越来越大,CPU 访问的频度也越来越少。最上层的寄存器通常都制作在 CPU 芯片内,寄存器中的数直接在 CPU 内部参与运算。现代 CPU 内可以有十几个、几十个寄存器,它们的速度最快、位价(平均每位的价格)最高、容量最小。主存用来存放将要参与运行的程序和数据,但其速度与 CPU 速度差距较大,为了使它们之间的速度更匹配,在主存与 CPU 之间插入了一种比主存速度更快、容量更小的高速缓冲存储器 (cache)。主存与缓存之间的数据调动是由硬件自动完成的,对程序员来说是透明的。这三层都在主机内,多由各种半导体存储材料制成。辅助存储器存储容量比主存储器大得多,主要用来存放暂时未用到的程序和数据文件。CPU 不能直接访问辅存,辅存只能与主存交换信息,但它的位价是最便宜的。

    • 存储器的层次结构实质上还是体现为缓存—主存和主存—辅存这两个存储层次上。从CPU 的角度看,缓存—主存层次的速度接近于缓存,容量与每位价格则接近于主存。因此,解决了速度与成本之间的矛盾。而主存—辅存这一层次,从整体分析,其速度接近于主存,容量接近于辅存,平均位价也接近于低速、廉价的辅存位价,这又解决了速度、容量、成本这三者间的矛盾。这种多层次结构已成为现代计算机的典型存储结构。在主存—辅存这一层次的发展中,形成了虚拟存储系统。在这个系统中,程序员编程的地址范围与虚拟存储器的地址空间相对应。例如,机器指令地址码为 32 位,则虚拟存储器的存储单元可达 4GB。可是这个数与主存的实际存储单元个数相比,要大得多。通常称这类指令地址码为虚地址或叫逻辑地址,而把主存的实际地址称作实地址或物理地址。

    • 物理地址是程序在执行过程中能够真正访问的地址,也是真实存在于主存的存储地址。对具有虚拟存储器的计算机系统而言,编程时可用的地址空间远远大于主存空间,使程序员以为自己占有一个容量极大的主存,其实这个主存并不存在,这就是将其称为虚拟存储器的原因。对虚拟存储器而言,其逻辑地址变换为物理地址的工作,是由计算机系统的硬件设备和操作系统自动完成的,对应用程序员是透明的。当虚地址的内容在主存储器中时,机器便可立即使用;若虚地址的内容不在主存,则必须先将此虚地址的内容在辅存中找到,传递到主存储器的合适单元后再被机器所用。主存储器是可以和 CPU 直接交换信息的存储器,它通常由存放程序和数据的随机读写存储器 RAM 和存放某些固定内容的只读存储器 ROM组成。

  
  


总结一下,本篇介绍了C语言的起源、编译原理、存储层次,对后续的学习是有很大帮助的

小僧初来乍到,希望大家多多支持!如有纰漏,欢迎大家在评论区留言,小僧会及时更正,同时,大家如果有疑惑的地方可以把问题写在评论区,小僧看到会回复哟😄!
另外,小僧的公众号上线啦,里面有“实用工具”、“学习资源”以及许多资料,欢迎大家关注一波小僧的公众号👇

在这里插入图片描述
  
  
  
参考:
百度百科
《C语言开发从入门到精通》------王长青、韩海玲


http://chatgpt.dhexx.cn/article/OF9rDl8f.shtml

相关文章

C语言的概述

1、计算机与程序设计的关系 计算机的本质是程序的机器,程序和指令是计算机系统中最基本的概念。 程序语言设计的产生是为了克服繁琐难记的二进制语言代码。 2.C语言程序的特点 优点:①语言简洁、紧凑;使用方便,灵活性高。 ②运算…

【C语言】C语言的简介

计算机只能直接识别和处理二进制码&#xff0c;C语言是一种能够让人类跟计算机交流的语言。 代码演示&#xff1a; #include <stdio.h>/*预处理命令*/int main()/*主函数*/ {/*函数体开始*/printf("This is a C program.\n");//调用标准库函数printf 完成显示…

C 语言简介

一.发展 C语言是一种强大的专业化编程语言&#xff0c; C语言的原型是A语言&#xff08;ALGOL 60语言&#xff09;。 1963年&#xff0c;剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言。 1967年&#xff0c;剑桥大学的Matin Richards 对CPL语言进行…

C++语言简介

C语言的发展简史 C是由贝尔实验室1979年在C语言的基础上开发成功的。C兼容C语言&#xff0c;用C语言写的程序基本上可以不加修改地用于CC对C的“增强”表现在两个方面&#xff1a; &#xff08;1&#xff09;在原来面向过程的机制基础上&#xff0c;增强了C语言对类型的处理。 …

C语言(一):C语言概述介绍

目录 1.1 什么是C语言 1.2 计算机介绍 1.2.1 计算机结构组成 1.2.2 计算机系统组成 1.2.3 程序和指令 1.3 语言发展历程 1.3.1 机器语言 1.3.2 汇编语言和编译器 1.3.3 高级语言 1.3.4 语言的层次 1.3.5 语言进化史 1.4 为什么要学习C语言 1.4.1 C语言特点 1) 优…

C语言知识简介

一、什么是C语言 C语言是一门通用计算机编程语言&#xff0c;广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。 二、第一个C语言程序 #include<stdio.h> …

如何建设数据指标体系?

前言 指标&#xff0c;只要做业务或者做数据&#xff0c;没有不知道的。但是&#xff0c;近年来&#xff0c;随着数据中台推出&#xff0c;数据标签、用户画像等时髦热词涌现&#xff0c;突然间&#xff0c;人们不太讲指标了&#xff0c;仿佛一切又都变成只要有标签就万事搞定…

互联网业务数据指标体系

互联网业务数据分析&#x1f370; Chap1 数据指标体系与建模方法&#x1f388; 一、常用的数据指标 数据可以分为三类&#xff1a;用户数据、行为数据、业务数据(描述业务本身的发展) 1.用户数据 1.1 DAU MAU DAU&#xff08;Daily Active User&#xff09;&#xff1a;单日…

数据指标体系

数据指标体系 指标与指标体系定义&#xff08;What&#xff09;搭建指标体系的背景与意义&#xff08;Why&#xff09;如何搭建指标体系&#xff08;How&#xff09;零售电商行业指标体系互联网行业指标体系 指标与指标体系定义&#xff08;What&#xff09; 指标是对业务的描…

数据分析——如何构建数据指标体系

文章转自 数据指标体系搭建实践 1. 什么是数据指标 指标&#xff0c;是反映某种事物或现象&#xff0c;描述在一定时间和条件下的规模、程度、比例、结构等概念&#xff0c;通常由指标名称和指标数值组成。 2. 为什么要搭建指标体系 例如&#xff0c;在实际场景中&#xff…

【业务数据分析】——常见业务指标

&#x1f935;‍♂️ 个人主页&#xff1a;Lingxw_w的个人主页 ✍&#x1f3fb;作者简介&#xff1a;计算机科学与技术研究生在读 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4a…

【数据分析】数据指标

目录 什么是好的数据指标&#xff1f; 找出正确的数据指标的五点方法 1、定性指标与量化指标 2、虚荣指标与可付诸行动的指标 3、探索性指标与报告性指标 4、先见性指标与后见性指标 5、相关性指标与因果性指标 市场细分、同期群分析、AB测试和多变量分析 市场细分 同期群分析 …

什么是数据指标体系?

一.概况 1.定义 对当前业务有参考价值的统计数据 2.作用 监控业务情况 通过拆解指标寻找当前业务问题 评估业务可改进的地方&#xff0c;找出下一步工作的方向 3.常用数据指标 谁&#xff1a;用户数据 干了什么&#xff1a;行为数据 结果怎样&#xff1a;业务数据 二…

【数据分析】—— 指标与指标体系

01 指标与指标体系 指标&#xff1a;从社会科学角度看&#xff0c;指标是统计学的范畴&#xff0c;将说明总体数量特征的概念称为指标。传统的指标有国内生产总值&#xff08;Gross Domestic Product&#xff0c;GDP&#xff09;、国民生产总值&#xff08;Gross National Pro…

国家统计局指标数据深入分析

国家统计局指标数据深入分析 统计局指标数据结构分析国家统计局数据集行政区划指标数据常见指标id如何从统计局网站获取指标ID查询示例 开始查询 国家统计局的数据给许多人的工作和学习提供了丰富且权威的数据。但提供的数据获取方式不尽如人意&#xff0c;因此在网上能找到各种…

数据指标管理

什么是指标&#xff1f; 指标是将业务单元精分和量化后的度量值&#xff0c;使得业务目标可描述、可度量、可拆解。数据指标构成如下: 数据指标体系是对业务指标体系的汇总&#xff0c;用来明确指标的口径、维度、指标的取数逻辑等信息。它的价值体现在&#xff1a; 全面支撑…

【业务数据分析】——数据指标和数据指标体系

&#x1f935;‍♂️ 个人主页&#xff1a;Lingxw_w的个人主页 ✍&#x1f3fb;作者简介&#xff1a;计算机科学与技术研究生在读 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4a…

数据分析 常用的数据指标

数据分析 常用的数据指标 数据指标的作用是用来衡量、追踪和监控业务的&#xff0c;对于一项具体的业务来说&#xff0c;它所包含的数据通常有三大类&#xff1a;用户数据(谁)、行为数据(做了什么)、产品数据(对应的产品是什么)。那么&#xff0c;相应的数据指标也可分为三大类…

【数据标准】数据指标体系建立

前沿 数据分析常遇到挑战 问题出在哪里&#xff1f; 当一个决策分析类项目&#xff08;如商务智能、数据仓库、大数据分析等&#xff09;开始筹划的时候&#xff0c;往往面临着如何选择分析场景的问题。有一些业务人员非常有想法&#xff0c;目标明确&#xff0c;直接请实施厂…

数据指标体系:指标好坏评价标准

关于指标体系构建的方法论非常多&#xff0c;基于实际业务场景加上方法指导都可以照猫画虎地构建出自己的指标体系。但光有了所谓的指标体系不是终极目标&#xff0c;想要更加高效的数据驱动决策、数据赋能业务运营&#xff0c;指标好坏的评价标准是必不可少的要素。 一、为什…