程序的编译

程序的编译分成二种执行环境

第一种是翻译环境,把源代码转换成可执行的机器指令

第二种运行环境,用来执行代码

我们有个test.c这个源文件,我们来把它编译,我们最后会把它变成test.exe这个执行文件

那么我们是怎么变成的

经过翻译环境变成的

翻译环境又分为二个模块,编译和链接

编译又细分为三个小模块,预编译,编译,汇编

我们比如有个test.c文件要执行,那test.c源文件就要经过编译器生成test.obj这个目标文件这个过程叫编译,test.obj目标文件再和链接库一起经过链接器链接生成test.exe执行文件,这个过程叫链接

那么我们再从预编译这些小模块开始,看看它们都做了什么

(1).预编译

1.头文件展开

2.去注释

3.宏替换 

(2)编译

把代码变成汇编代码

1.语法分析

2.词法分析

3.语义分析

4.符号汇总

(3)汇编

形成符号表,把汇编语言变成机器语言

那么什么是符号表,把main,函数名,printf,等等全局范围的记录下来,形成符号表

(4)链接

1.合并段表

2.符号表的合并和重定位

什么是段表,Linux里面的文件,会把有相同的功能分成一段一段

符号表的合并和重定位的意思是,不知道其他文件的地址,合并了过后就知道了地址

运行环境

1.把程序载入到内存里,再有操作系统的环境里,一般都是由操作系统来操作的

2.程序执行开始,调用main函数

3.开始执行,创建一个一个函数栈帧

4.执行结束,也可能是程序正常结束,或者是意外终止


版权声明:本文为li1829146612原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。