前言
C++程序用文本编辑器编辑完成后,需要经过编译、汇编和链接三个步骤生成一个可执行文件
那么原本的文本文件在每个步骤都发生了什么?本文将根据个人理解进行介绍,由于本人是C++萌新选手,必然存在较多漏洞,希望读者不吝指正,谢谢!
本文是作者读了预处理、编译、汇编和链接_预处理 编译 汇编 链接_ClassRoom706的博客-CSDN博客后,提炼为自己认知水平的笔记,大佬请移步,不喜勿喷。
预处理
在编辑程序时,有很多预处理的手段,例如:包含头文件、条件编译、宏定义等等。这些手段可能执行的时间不同,但殊途同归,都是完成源文件的代码替换功能。
编译
编译阶段是通过编译器对源文件进行词法和语法分析,确认无误后生成汇编语言。同时还会对代码进行优化。
汇编
汇编阶段是将汇编语言代码翻译成目标机器代码,生成可执行的目标文件。目标文件由代码段和数据段组成,代码段主要为程序的指令,被用来一条一条的执行,而数据段存放的都是指令中要用到的全局变量或静态的数据。
链接
汇编后生成的目标文件,除了可执行的目标文件,还有可重定位的目标文件、共享的目标文件。主要因为程序在编写的过程中,源文件中引用了其它文件中的函数或符号,链接的主要工作是将有关的目标文件链接起来。
静态链接
这种链接方式是将静态链接库中的函数代码直接拷贝到最终的可执行程序中。静态链接库实际上就是共享的目标文件,其中文件内就是库中的相关函数代码。
动态链接
动态链接方式是在可执行程序中记录共享对象的名字或其它可重定位的信息。在程序执行时,会通过重定位信息找到相应的函数代码。
静态链接和动态链接的优缺点
通过动态链接能够使最终的可执行文件短小,节约内存。然而某种情况下,动态链接会带来性能上的损害。
也由此可知静态链接的最大好处就是执行性能好,但使用的内存较大。