C语言中程序的运行步骤

C的任何一种实现中,存在着两种不同的环境。第一种是翻译环境,在这个环境里,源代码被转换为可执行的机器指令。第二种是执行环境,它用于实际执行代码。

1. 翻译

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

C语言中程序的运行步骤_第1张图片

1.1 编译过程本身也由几个阶段组成。

首先是预处理器处理:预处理器在源代码上执行一些文本操作。例如,用实际值代替由#define指令定义的符号以及读入由#include指令包含的文件的内容。

然后,源代码经过解析(parse),判断它的语句的意思。该阶段是产生绝大多数的错误和警告信息的地方。随后,便产生目标代码。目标代码是机器指令的初步形式,用于实现程序的语句。

2.执行

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

首先,程序必须载入内存,这个任务由操作系统完成。那些不是存储在堆栈中的尚未初始化的变量将在这个时候得到初始值。

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

最后,程序终止

你可能感兴趣的:(C语言学习笔记)