




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、附录二内容回顾,C语言库的特性和发展 C语言库的常用库函数 标准库函数的特色应用,嵌入式C程序的编译与调试,附录三,预习检查,C语言的编译过程分哪几个阶段 嵌入式系统的编译过程分几个阶段 程序中具体有哪几个重要的段,本章目标,本章概述 主要描述从源代码编译成可执行文件的过程,以及在操作系统是怎么运行的 本章目标 掌握C编译的预处理过程, 了解编译,链接的过程 了解程序是如何执行的,以及函数调用时发生了什么 重点 编译的流程 函数调用的深入分析 难点 操作系统是如何执行程序的,本章结构,C语言编译过程,C语言的编译与运行,C语言程序的运行,嵌入式编译过程,3-1 C语言编译,C语言编译器 C语言
2、编译过程 Makefile,3-1-1 C语言编译器,C语言是在70年代初问世的。一九七八年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。 早期的C语言主要是用于UNIX系统 目前最流行的C语言编译器有以下几种: GNU Compiler Collection 或称 GCC Microsoft C 或称 MS C Borland Turbo C 或称 Turbo C,3-1-2 C语言编译过程,编译:编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。
3、C源程序头文件预编译处理(cpp)编译程序本身优化程序汇编程序链接程序-可执行文件 预处理 编译阶段 优化阶段 汇编过程 连接程序,3-1-2-1 编译预处理,预处理:读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理。 伪指令主要包括以下四个方面: 宏定义指令 如 #define Name #undef 条件编译指令 如#ifdef,#ifndef,#else,#elif,#endif, 头文件包含指令 如#include FileName或者#include 等 特殊符号 如 LINE FILE 预编译程序所完成的基本上是对源程序的“替代”工作。经过此种替代,生成一个没有宏定
4、义、没有条件编译指令、没有特殊符号的输出文件。 这个文件的含义同没有经过预处理的源文件是相同的,但内容有所不同。,3-1-2-2 编译阶段,预编译程序所要作得工作: 词法分析 语法分析, 翻译成等价的中间代码表示或汇编代码。,3-1-2-3 优化阶段,优化处理是编译系统中一项比较艰深的技术。它涉及到的问题不仅同编译技术本身有关,而且同机器的硬件环境也有很大的关系 中间代码的优化 不依赖于具体的计算机 主要的工作是删除公共表达式、循环优化(代码外提、强度削弱、变换循环控制条件、已知量的合并等)、复写传播,以及无用赋值的删除, 目标代码的生成优化 依赖于具体的计算机 充分利用机器的各个硬件寄存器存
5、放的有关变量的值,以减少对于内存的访问次数 对指令进行一些调整使目标代码比较短,执行的效率比较高 经过优化得到的汇编代码必须经过汇编程序的汇编转换成相应的机器指令,方可能被机器执行,3-1-2-4 汇编阶段,汇编过程实际上指把汇编语言代码翻译成目标机器指令的过程 目标文件中所存放的也就是与源程序等效的目标的机器语言代码。 目标文件由段组成 代码段 该段中所包含的主要是程序的指令。该段一般是可读和可执行的,但一般却不可写。 数据段 主要存放程序中要用到的各种全局变量或静态的数据。一般数据段都是可读,可写,可执行的。,3-1-2-4 汇编阶段,UNIX环境下主要有三种类型的目标文件: 可重定位文件
6、 其中包含有适合于其它目标文件链接来创建一个可执行的或者共享的目标文件的代码和数据。 共享的目标文件 这种文件存放了适合于在两种上下文里链接的代码和数据。第一种事链接程序可把它与其它可重定位文件及共享的目标文件一起处理来创建另一个目标文件;第二种是动态链接程序将它与另一个可执行文件及其它的共享目标文件结合到一起,创建一个进程映象。 可执行文件 它包含了一个可以被操作系统创建一个进程来执行之的文件。 汇编程序生成的实际上是第一种类型的目标文件。对于后两种还需要其他的一些处理方能得到,这个就是链接程序的工作了。,3-1-2-5 链接阶段,链接程序是将有关的目标文件彼此相连接,使得所有的这些目标文件
7、成为一个能够被操作系统装入执行的统一整体。目标文件由段组成 链接处理可分为两种 : 静态链接 动态链接,3-1-3 Makefile,makefile是用于自动编译和链接的 makefile能够纪录文件的信息,决定在链接的时候需要重新编译哪些文件,3-2 嵌入式C程序的编译过程,创建过程 编译 链接 定址,3-2-1 创建过程,源代码转换为可执行的二进制映像的过程 源文件都被编译或汇编到一个目标文件(object file) 可重定位程序(relocatable program) 重定址(relocation)的过程,3-2-2 编译,编译器的工作主要是把用人可读的语言所书写的程序,翻译为特定
8、的处理器上等效的一系列操作码。,3-2-3 链接,创建过程 编译 链接 定址,3-2-4 定址,创建过程 编译 链接 定址,3-3 程序运行,A.out及其传说 段 操作系统在a.out里干了什么 C语言运行在a.out里干了什么 函数调用时发生了什么 Auto和static关键字 Unix/Linux的堆栈段 MS-DOS的堆栈段,3-3-1 A.out及其传说,A.out -“assembler output(汇编程序输出)”的缩写形式 a.out文件格式分析 a.out 文件包含7 个section,格式如下: exec header(执行头部,也可理解为文件头部) text segme
9、nt(文本段) data segment(数据段) text relocations(文本重定位段) data relocations(数据重定位段) symbol table(符号表) string table(字符串表) a.out 是早期UNIX系统使用的可执行文件格式,由 AT&T 设计,现在基本上已被 ELF 文件格式代替,3-3-2 段,段(segments) :是二进制文件中简单的区域,里面保存了和某种特定类型(如符号表条目)相关的所有信息 段可以方便地映射到链接器在运行时可以直接载入的对象中 段在正在执行的程序中是一块内存区域,每个区域都有特定的目的,3-3-3 操作系统在a.
10、out里干了什么,为什么a.out要以段的形式组织 段可以方便地映射到链接器在运行时可以直接载入的对象中! 段在正在执行的程序中是一块内存区域,每个区域都有特定的目的 段特点 文本段包含序的指令 数据段包含经过初始化的全局和静态变量以及它们的值 堆栈段用于保存局部变量、临时数据、传递到函数中的参数,3-3-4 C语言运行在a.out里干了什么,运行时数据结构种类 堆栈 活动记录(activation record) 数据 堆,3-3-4 C语言运行在a.out里干了什么,堆栈段 堆栈段包含一种单一的数据结构堆栈 一块动态内存区域,实现了一种“后进先出”的结构 sp,用于提示堆栈当前的顶部位置
11、堆栈段作用 堆栈为函数内部声明的局部变量提供存储空间 进行函数调用时,堆栈存储与此有关的一些维护性信息 堆栈也可以被用作暂时存储区,3-3-4 C语言运行在a.out里干了什么,如何找到段的地址 声明位于这些段的变量,并打印它们的地址 在不同的计算机架构和不同的操作系统中,堆栈的位置可能各不相同 例:,#include main() int i; printf(”The stack top is near %pn”,i); return 0; ,3-3-5 函数调用时发生了什么,跟踪调用链 C语言自动提供的服务 哪些函数调用了哪些函数 实现机制:堆栈中的过程活动记录 过程活动记录 是一种数据结
12、构 支持过程调用 记录调用结束以后返回调用点所需要的全部信息,3-3-6 Auto和static关键字,A.out及其传说 段 操作系统在a.out里干了什么 C语言运行在a.out里干了什么 函数调用时发生了什么 Auto和static关键字 Unix/Linux的堆栈段 MS-DOS的堆栈段,3-3-7 Unix/Linux的堆栈段,堆栈会自动生长 堆栈段(stack segment)包括两部分: 堆(heap):供动态内存(通过malloc申请的)。堆在BSS区域的上方,随着程序不断申请内存,堆会向上增长,ps命令显示的进程占用内存的大小也会随之变化。 栈(stack):就是维护函数调用的系统栈,函数的参数和本地变量(除去静态变量)储存在这里。栈位于进程内存空间的最高段,并随着函数的调用向下增长。函数回调时,栈向上收回,其中的参数和变量数据作废。,3-3-8 MS-DOS的堆栈段,在DOS中,在建立可执行文件时,堆栈的大小必须同时确定,而且它不能在运行时增长。 确定堆栈大小的方法根据所使用的不同编译器而不同 在Microsoft编译器中,程序员可以把堆栈的大小作为一个链
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全防火培训课件
- 茶叶加工培训课件图片
- 市场定位与发展趋势预测
- 2024年安徽省合肥市第四十六中学九上化学期末达标检测模拟试题含解析
- 2024-2025学年江苏省无锡市梁溪区化学九上期末预测试题含解析
- 河道保洁整治管理办法
- 油茶种植基地管理办法
- 泉州冬季果园管理办法
- 法院律师平台管理办法
- 注册咨询登记管理办法
- 2025至2030中国汽车散热器行业市场发展分析及商业模式与投融资发展报告
- GB/T 45698-2025物业服务客户满意度测评
- 统编版语文二下园地三+单元复习课 课件
- 2025年轻人情绪消费趋势报告-抖音商城xsocialbeta-202506
- 培训中心项目管理制度
- 承包企业食堂管理制度
- 智能合约的自适应优化与动态执行研究-洞察阐释
- 高中教科研课题:《新课程背景下高中语文情境教学改革研究》课题工作汇报
- 本土品牌“品牌年轻化”策略研究
- 2025年宁波市奉化区红果文体产业运营管理有限公司招聘笔试参考题库含答案解析
- 湖南省永州市宁远县2025届七年级数学第二学期期末达标检测试题含解析
评论
0/150
提交评论