【C语言】浅析编译原理
致读者:
提到“编译原理”,大部分人的首要反应就是苦恼。确实,编译原理这一部分的内容在计算机学习中是比较难以理解的一部分。首次接触编译原理,我也感觉很复杂,难以理解。但是当看过几次之后,对于一些简单知识点的理解就有点眉目了。在这里就将有点眉目的知识写一下。
编译原理:
要了解编译原理,首先,我们一起来来看看一个程序具体的编译过程吧。
综上可见:
● 组成一个程序的每个源文件通过编译过程分别转换为目标代码。
● 每个目标文件由链接器捆绑在一起,同时引入标准C函数库中任何被该程序所用到的函数,当然也可以搜索到个人工作目录路径下的库函数。
详解---编译+链接:
了解了整个程序编译过程后,然后我们就来看一个源文件如何具体被编译成目标可执行文件的吧。
综上可知:
程序在运行过程中要经过两个环境:翻译环境,执行环境。
翻译环境:源代码转换为机器指令。
执行环境:用于实际执行代码。
编译具体步骤如下:
综上可知;一个源文件经过编译过程也是相当复杂的,其中涉及的几个步骤:
结合linux系统叙述:
1.预处理 选项 gcc -E test.c -o test.c
预处理完成就停下来,产生结果放在test.i文件中。
2.编译 选项 gcc -S test.c
编译完成之后就停下来,结果保存在test.s中。
3.编译 gcc -C test.c
汇编完成之后就停下来,结果保存在test.o中。
运行环境:
程序执行过程:
● 程序必须载入内存中。在有操作系统的环境中:一般此过程由操作系统完成。独立环境中,程序载入必须手工完成,也可能通过可执行代码置入只读内存来完成。
● 程序的执行便开始。接着调用main()函数。
● 开始执行程序代码。这个时候程序将使用一个运行时堆栈,存储函数的局部变量,函数参数,返回数据和返回的地址。同时也可以使用静态内存,存储于静态内存中的变量在程序的整个运行过程中一直保留它们的值。
● 终止程序。正常终止main函数,也可能会中途意外终止。
以上简单介绍程序编译过程,如有不正之处,欢迎各位来跟小编一起讨论!