执行文件的产生环境:
记得刚开始使用到从初中学习而来的编程知识是在一次大学一个编程社团的招聘考试中用到的。当时的一个题目仅仅是写出一个从1加到100,计算结果的简单代码。那时的我对这个问题只能说是勉强,现在想想还真是有纪念意义啊。不过话说回来,从那之后随着我渐渐熟悉了C,我便开始思考机器是怎么样能将我编的代码执行的。这个问题到现在我还只是大概了解,嗯,还是有很多需要认识,学习啊。
接下来我将书中的一些解释以个人的想法写出来,写给与我那时有同样困惑的同学,也同样写给那时的我:
首先C中包含两种环境,分别是翻译环境和执行环境。
其中翻译环境可以将我在.c中写的源代码转换为可执行的机器指令,机器就是读取转换后的机器语言来执行我们的代码的。
而执行环境就是执行我们转换后的语言的环境。
下面我们就翻译和执行分别具体描述。
if(翻译环境)
{
switch(step)
{
case 翻译:
源文件通过编译生成目标代码,各个目标代码通过链接器捆绑组成可执行程序。
其中编译又分为预处理,解析(优化器)。预处理在上一文中已经说过,可以先简单地理解为替 换,替换#include中的内容,替换#defined的内容,在这个过 中代码不会出现错误;
但接下来的解析就是产生绝大多数错误和警告信息的地方。解析过代码后我们可以再加一个额外 的步骤就是代码优化,在代码中加入了优化器后,优化器就会对目标代码进行进一步的优化,让 代码的效率更高(注意volatile)。但优化器会需要额外的时间,所以在程序调试时一般不会使用 该步骤。
下面主要讲下编译和链接的一些命令:
1、编译并链接一个完全包含于一个源文件的C程序:
cc program.c
编译生成一个.o文件,链接完成后该.o文件会被删除
2、编译并链接几个C源文件
cc main.c sort.c lookup.c
编译的源文件超过一个时,目标文件便不会被删除,为的是能在下次编译时只对修改过的文 件进行重新编译,节省时间
3、编译一个C源文件,并和现存的目标文件链接在一起
cc main.o sort.o lookup.c
4、编译单个C源文件并产生一个目标文件,以后再链接
cc -c program.c
5、编译几个C源文件,并为每个文件产生一个目标文件
cc -c main.c sort.c lookup.c
6、链接几个目标文件
cc main.o sort.o
如果想把产生的执行文件文件重新命名,可以在生成可执行文件的命令后加上”-o name“, 其中"name"就是你想要的命名。
case 执行:
程序会首先载入内存,在宿主环境中(有操作系统的环境)该程序则由操作系统完成;在独立环 境中程序手工安排,可能是将代码置于只读内存中(ROM)来完成
!!!堆栈:用于存储函数的局部变量和返回地址
!!!静态内存:存储于静态内存中的变量。
}
}