• 售前

  • 售后

热门帖子
入门百科

步伐的编译、链接和实行

[复制链接]
护身马甲上阵兜 显示全部楼层 发表于 2022-1-16 11:56:55 |阅读模式 打印 上一主题 下一主题
参考:步调的编译、链接和实验 - 知乎
处置惩罚C语言步调:
预处置惩罚、编译、汇编、链接、加载

预处置惩罚(Preprocessing)
翻译一段 C 语言步调的第一步是预处置惩罚。这一步紧张处置惩罚全部以“#”号开头的行。比如当我们遇到 #include "header.h" 的时间,就直接把 header.h 文件里的全部内容插入到这儿。由此可见,一段 C 语言步调颠末预处置惩罚之后还是一段 C 语言步调。
编译(Compilation)
第二步是编译,也就是将一段 C 语言步调翻译为一段汇编语言步调。汇编语言比 C 语言要底层多了,根本上就是呆板指令的笔墨版,每一行汇编语言对应着一条呆板指令。每每 C 语言步调里的一行要被翻译成好几行汇编语言步调才行。差异的高级语言(如 C、Fortran、Pascal 等等)有差异的预处置惩罚器和编译器,但它们在颠末编译之后都变成了同一种汇编语言,于是反面的步调和工具各人都是通用的了。
汇编(Assembly)
第三步是汇编,即把笔墨版的汇编语言步调真正翻译成由 0 和 1 构成的呆板指令,并把它们打包输出成一个 relocatable object program(下文简称目的文件)。假如说汇编语言步调人类还委曲能看懂,颠末这一步之后得到的目的文件就真的是一堆二进制乱码了。
链接(Linking)
第四步是链接,用来把多个目的文件归并成一个可实验文件。比如说我们写了一个 hello world 步调,此中调用了 C 语言尺度库里的 printf() 函数来打印。我们的 hello world 的主函数和 printf() 函数存放在两个差异的目的文件里,颠末这一步之后它们就被归并到一起了。(这里讲的是静态链接。假如是动态链接的话,printf() 在这一步暂时不归并进来,而是在下一步步调运行的时间才被加载。)
加载(Loading)
上一步所天生的可实验文件终于可以被使用体系加载运行了。使用体系会将这个可实验文件中的代码和数据从磁盘复制到内存中,并跳转到该步调的第一条指令处(也叫做入口点,entry point)开始实验。




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作