栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C/C++编译器工作原理

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C/C++编译器工作原理

编译过程主要分:预处理、编译+汇编、静态链接 这三个过程

1、预处理:
预处理过程主要处理那些源文件中的以“#”开始的预编译指令。包括#include,#define, #if等等
主要的处理规则如下:

  • 将所有的#define删除,并且展开所有的宏。
    如#define a b 就是将所有的a替换成b
  • 处理所有的条件预编译指令,,如#if,#ifdef,#else,#endif,以此来决定对哪些代码进行处理,将那些不必要的代码过滤掉
  • 处理#include预编译指令,将被包含的文件插入到该预编译指令的位置

2、编译+汇编
编译:
通过词法分析、语法分析、语义分析、源代码优化、类型检查等等,将源代码翻译成汇编代码。

汇编:
通过代码生成、目标代码优化等把汇编语言代码翻译成二进制机器码

编译+汇编示意图:

3、静态链接
前面的编译中,每个源代码模块是单独编译的,然而不同的模块之间不可避免地要相互引用变量或函数,这些变量或函数的地址只有在此阶段才能确定。链接过程就是把编译器生成的一个个目标文件链接成二进制可执行文件(.exe)

此阶段的链接是静态链接,运行期间的链接则是动态链接。
动态链接:静态链接期间不完成实际的链接操作,只保存函数的重定位信息,在运行期间才去找到动态库的函数符号进行重定位。

编译完成之后,运行:
“静态的程序”被载入内存,由 CPU 逐条语句执行,就形成了“动态的进程”。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1018710.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号