我是靠谱客的博主 勤奋汽车,最近开发中收集的这篇文章主要介绍如何向面试官讲清楚程序编译过程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

源文件到产生效果是个很复杂的过程
大体步骤分为编译和链接
你如果只是背,这四点千万不要忽略
预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和链接(Linking)。
首先是个大的过程,编译。
编译分为预编译和编译加汇编
预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。接着调用cc1进行编译,这个阶段根据输入文件生成以.i为后缀的目标文件。汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.S为后缀的汇编语言源代码文件和汇编、.s为后缀的汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件

为了更清晰可见,我们再gcc编译下更清晰认识到
首先是预编译
我们假设有这样一个文件
getopt_exp.c
在进行预编译后
我们将结果放在res.i文件中
gcc -E getopt_exp.c -o res.i

我们来查看行数发现
在这里插入图片描述
可见预编译后是个庞大的代码量
接下来就是编译了
在编译过程中会进行语法分析 词义分析 语义分析 符号汇总
编译阶段将C语言转换成汇编语言 生成 .s文件
在这里插入图片描述
我们可以看到这时候代码量急剧减少,接下来就是我们所谓的汇编阶段
汇编就是将汇编指令翻译成二进制指令形成符号表。 生成.o文件
这个阶段,生成目标代码。
此过程生成ELF格式的目标代码
在这里插入图片描述
接下来就是链接过程,生成可执行代码。链接分为两种,一种是静态链接,另外一种是动态链接。使用静态链接的好处是,依赖的动态链接库较少,对动态链接库的版本不会很敏感,具有较好的兼容性;缺点是生成的程序比较大。使用动态链接的好处是,生成的程序比较小,占用较少的内存。链接主要有个过程
1:合并段表,将对应段合并在一起
2:符号表的合并和无符号表的重定位。
在这里插入图片描述
完成链接后就能得到我们想要的结果啦。

最后

以上就是勤奋汽车为你收集整理的如何向面试官讲清楚程序编译过程的全部内容,希望文章能够帮你解决如何向面试官讲清楚程序编译过程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部