简单介绍程序的翻译环境和执行环境

前言:我们常常在程序中看到编译,链接,执行,但是你真的了解过它们吗?作为一名未来的合格的程序员,应当能够对它们有清晰的认知。本文就将对它们进行浓缩精炼的介绍,让你面对它们的时候不再感到迷惑。
想要深入了解的话,推荐朋友们看一看《程序员的自我修养》这本书。

程序的翻译环境和执行环境

在ANSI C的任何一种实现中,都存在着两个不同的环境

第一种是翻译环境,在这个环境中源代码被转换成可执行的机器指令
第二种是执行环境,它用于实际执行代码

而其中的翻译环境便是本章的重点内容,它还可以细分为好几个步骤。

翻译环境

这里是引用
上图是计算机程序设计语言的大致发展历程。而在翻译环境中,过程正与上图相反:
在这里插入图片描述
程序员输入易于理解的高级语言,转为汇编语言,再转为计算机能够识别的机器语言,这样不管对程序员,还是对计算机,都大大提高了工作效率,双方得利。

我们常常可以在文件中看到以.obj .exe结尾的文件,经过之前的学习,可能你会知道.obj就是目标文件,而.exe文件就是可执行文件,但是你知道它们是怎么产生的吗?请看下图翻译环境的细分图:

在这里插入图片描述
翻译环境分为编译链接两部分,而编译又可以细分为预编译(预处理) 编译 汇编三部分

预编译(预处理)

通过预编译,程序会产生一个.i文件,这个阶段完成了:1.头文件的包含 2.注释的删除 3.宏定义的转换等

编译

通过编译,生成一个.s文件,源代码被翻译成汇编代码 ,这个阶段完成了:1.语法分析 2.词法分析 3.语义分析 4.符号汇总

汇编

对汇编代码(.c)进行汇编操作生成一个目标文件(.obj),将汇编代码翻译成二进制的指令(目标文件中存储的是二进制的指令),在此阶段生成符号表

扫描二维码关注公众号,回复: 14879955 查看本文章

链接

1.合并段表
2.符号表的合并和重定位
经过上面两个步骤,生成可执行程序.exe
注:符号表的合并:每个.o文件都有符号表,将几个.0文件的符号表进行合并,进而生成一个新的符号表。

转载网图两张,方便理解:

在这里插入图片描述

在这里插入图片描述

总结:每个源文件都是单独编译的,最后各自生成一个.obj目标文件,多个目标文件通过链接器处理生成一个.exe可执行文件

执行环境

在这里执行环境不做过多的叙述

程序执行的过程:
1.程序必须载入内存中,在有操作系统的环境中:一般这个操作有操作系统完成。在独立的环境中,程序的子啊如必须由手工安排,也可以是通过可执行代码植入只读内存来完成
2.程序的执行开始,接着便调用main函数
3.开始执行程序代码,这个时候将使用一个运行时堆栈,存储函数的局部变量和返回地址。程序同时也可以使用静态内存,存储于静态内存中的变量在程序的整个执行过程一直保留它们的值。
4.终止程序。正常终止main函数,也有可能是意外终止。

文末BB:对哪里有问题的朋友,可以在评论区留言,若哪里写的有问题,也欢迎朋友们在评论区指出,博主看到后会第一时间确定修改。最后,制作不易,如果对朋友们有帮助的话,希望能给点点赞和关注.
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_73390155/article/details/130039431