程序的编译分成二种执行环境
第一种是翻译环境,把源代码转换成可执行的机器指令
第二种运行环境,用来执行代码
我们有个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版权协议,转载请附上原文出处链接和本声明。