环境

在ANSI C 的任何一种实现中,存在两种不同的环境。分别为: 翻译环境(translation environment)和 执行环境(execution environment)。

在翻译环境中,源代码被转换为可执行的机器指令;执行环境,用于实际执行代码。


翻译

翻译阶段由几个步骤组成,组成一个程序的每个源文件通过编译过程分别转换为目标代码(object code)。然后,各个目标文件由链接器(linker)捆绑在一起,形成一个单一而完整的可执行程序。链接器同时也会引入标准C函数库中任何被该程序所用到的函数,而且它也可以搜索程序员个人的程序库,将其中需要使用的函数也链接到程序中。

如下图描述了这个过程:

编译过程本身也分为几个阶段,首先是预处理器(preprocessor)处理。在这个阶段,预处理器在源代码上执行一些文本操作。例如,用实际值代替由 #define 指令定义的符号以及读入由 #include 指令包含的文件的内容。

然后,源代码经过解析(parse),判断它的语句的意思。第2个阶段是产生绝大多数错误和警告信息的地方。

随后,便产生目标代码。目标代码是机器指令的初步形式,用于实现程序的语句。

如果我们在编译程序的命令行中加入了要求进行优化的选项,优化器(optimizer)就会对目标代码进一步进行处理,使它效率更高。


注意:文件名约定

C源代码通常保存于以 .c 扩展名命名的文件中。

由#include 指令包含到C源代码的文件称为头文件,通常具有扩展名 .h。

至于目标文件名,不同的环境可能具有不同的约定。例如,在UNIX系统中,它们的扩展名是.o,但在MS-DOS系统中,它们的扩展名为.obj。


执行

程序的执行过程,也需要经历几个阶段。

首先,程序必须载入内存中。在宿主环境中(也就是具有操作系统的环境),这个任务由操作系统完成。

在自由式环境中,程序常常永久存储于ROM中。

然后,程序的执行便开始。在宿主环境中,通常一个小型的启动程序与程序链接在一起。它负责处理一系列日常事务。

接着,便调用main函数,开始执行程序代码。在绝大多数机器中,程序将使用一个运行时堆栈(stack),它用于存储函数的局部变量和返回地址。程序同时也可以使用静态(static)内存,存储于静态内存中变量在程序的整个执行过程中将一直保留它们的值。

程序执行的最后一个阶段就是程序的终止,它可以由多种不同的原因引起。“正常”终止就是mian函数返回。在宿主环境中,启动程序将再次取得控制权,并可能执行各种不同的日常任务,如关闭那些程序可能使用过但并未显式关闭的任何文件。除此之外,也可能是由于在执行过程中出现错误而自行中断。

【 C 】翻译与执行相关推荐

  1. MME中DNS服务器的作用,Internet上的域名解析服务(DNS)完成域名与IP地址之间的翻译。执行域名服务的服务器被称为D - 信管网...

    第17题: "容器是一个构件,构件不一定是容器:一个容器可以包含一个或多个构件,一个构件只能包含在一个容器中".根据上述描述,如果用UML 类图对容器和构件之间的关系进行面向对象分 ...

  2. 『C』程序的翻译执行

    在ANSI C的任何一种实现中,存在两种不同的环境.第一种是翻译环境,在这个环境中,源代码被转换为可执行的机器指令.第二种是执行环境,它用于实际执行代码.标准明确说明,这两种环境不必位于同一台机器上. ...

  3. 2.7、Android Studio使用翻译编辑器本地化UI

    如果你的应用支持多语言,你需要合理的管理你的翻译的string资源.Android Studio 提供了翻译编辑器来使查看和管理翻译的资源更加容易. 关于翻译编辑器 翻译后的资源在你的项目里保存在不同 ...

  4. python运行程序-Python程序的执行过程

    1.C++和C都是属于编译型语言,本来的.c文件都是用高级语言编写的,计算机是不能识别高级语言的,所以,必须要通过编译,链接等手段,将.c文件转换成可执行文件,可执行文件就是纯二进制文件,然后计算机才 ...

  5. hive底层原理 sql执行过程_Hive mapreduce SQL实现原理——SQL最终分解为MR任务,而group by在MR里和单词统计MR没有区别了-阿里云开发者社区...

    转自:http://blog.csdn.net/sn_zzy/article/details/43446027 SQL转化为MapReduce的过程 了解了MapReduce实现SQL基本操作之后,我 ...

  6. Linux之bash脚本编程---选择执行

    编程风格 过程式编程,目的解决问题 指令组织数据,指令的堆砌 为了完成复杂的任务 顺序执行:遍历的方式执行,逐个运行 选择执行:有一种选择标准,结果只能有一种选择,只执行某些 代码片段 循环执行:对一 ...

  7. Paper:GPT-3《 Language Models are Few-Shot Learners》的翻译与解读

    Paper:GPT-3< Language Models are Few-Shot Learners>的翻译与解读 目录 <GPT-3: Language Models are Fe ...

  8. hive底层原理 sql执行过程_hive sql编译过程

    sql查询语句处理步骤流程图 准备实例,创建表,插入数据,写要分析的实例查询语句 1.首先创建两个表 2.创建两个表,并插入表数据,脚本略 3.编写咱们要解析的查询语句,即本篇要查询的实例语句. se ...

  9. 【Flink】 Flink 源码之 SQL 执行流程

    1.概述 转载:Flink 源码之 SQL 执行流程 2.前言 本篇为大家带来Flink执行SQL流程的分析.它的执行步骤概括起来包含: 解析.使用Calcite的解析器,解析SQL为语法树(SqlN ...

最新文章

  1. ExtJs grid合并单元格
  2. 后端 消息 转发_小程序转发探索示例
  3. 转化百分比_小秘诀教你如何快速提升大众点评访客转化率!
  4. 使用Maven创建Web项目后,jsp引入静态文件提示报错。JSP 报错:javax.servlet.ServletException cannot be resolved to a type...
  5. 效果好,速度快!DenseNAS:密集连接搜索空间下的高灵活度网络结构搜索
  6. Python单例模式的4种实现方法(转)
  7. (转)支持Dubbo生态发展,阿里巴巴启动新的开源项目 Nacos
  8. 传感器是新兴的机器人技术革命的关键要素
  9. div常用效果方法-transform
  10. 汉文博士 0.5.7.2356 版发布
  11. python快速搭建网页_使用python快速搭建HTTP服务实现局域网网页浏览或文件传输...
  12. 来给你的CSDN博客换个皮肤~
  13. 百度地图 - js获取行政区边界范围
  14. 【BAT】BAT 阶段技能汇总:全功能小程序
  15. 斩获微软offer后,我总结出这10个面试必备技巧(五星干货)
  16. eclipse中JSP文件编写乱码问题及解决方案
  17. PacBio三代测序专业术语解读
  18. OSG中使用png图片显示透明效果
  19. 静态成员变量与静态成员函数的声明与定义
  20. 下载并解密的ts文件,发现一部分ts文件能播放,一部分不能播放

热门文章

  1. NM-1A-OC3MM和NM-CIDS-K9模块的苦恼
  2. mysql中tonumber函数_Oracle数据库之oracle的TO_NUMBER函数
  3. php写js跳转页面,php实现页面的三种跳转
  4. html权重值_HTML标签权重分值排列
  5. python的sklearn示例_KNN sklearn python实现小示例
  6. js中delete是es6_js和es6中的字符串方法总结
  7. java php mysql_系统学习javaweb13----MYSQL学习(使用PHP、SQL)1
  8. cameraraw面板大小调整_Camera Raw基础操作面板介绍
  9. css如何让图片不平铺,css怎么设置图片平铺方式?
  10. 种豆得豆,种瓜得瓜 : 你的网络就是一片自留地