编译
编译概述

编译过程
预处理
- 预处理首先会将我们的
注释,预编译指令,条件编译指令,#include等进行展开或替换, 生成真正的代码.
- 预处理首先会将我们的
编译
- 对我们的
语法,词法,语义等进行解析 - 成功解析后进行代码优化(Release/Debug模式不同), 并生成我们的
二进制汇编码文件<div class=""></div>
- 对我们的
汇编
汇编器将汇编码翻译成机器码
链接
- 链接器对我们的程序进行
动态或者静态链接, 然后生成相应平台的可执行程序.
- 链接器对我们的程序进行
预处理器
处理
注释, 使用空格代替.
处理预处理指令, 比如 #define, 进行宏的展开和替换.
处理条件编译指令, 比如处理 #ifndef 来进行条件编译.
处理#include, 进行文件包含.
想要看到预处理文件吗?
以Viual Studio 2015为例:
在我们的解决方案视图中, 在项目上点击"右键", 选择"属性".
在打开的对话框窗口中, 找到"C++"-->"预处理器"-->"预处理到文件",
将本选项改为"是".
此时, 重新编译程序后, 在Debug文件夹下, 会看到 ".i" 的文件,
也就是我们的预编译文件.编译器
语句分析, 对
词法,语法,语义进行分析检测.
语义分析, 是近年来才出现的.
旨在提醒一些"未定义的操作", 或者手写的失误, 比如 if 中的 == 写成了 = 代码优化
一般的, 编译器会分为 Debug 和 Release 版本.
Debug版会方便调试, 会自动初始化一些变量, 会产生一些多余的代码, 并且原代码不会被精简.
Release版会更加注重执行效率, 会自动去掉一些无用代码, 并达到速度优化.经过编译器的编译, 将会生成
二进制汇编文件.
汇编器和链接器
汇编器
将编译器生成的
汇编码解释为机器码.
链接器
链接器会将外部的函数导入到当前项目中, 并生成相应平台的可执行程序.
链接分为 静态链接 和 动态链接 两种.静态链接
就像我们预处理器对#include所处理的那样,
在预处理阶段将所需要的函数进行查询并拷贝到当前文件中, 进行拼接,
这种方式就是静态链接.静态链接所生成的文件体积较大, 执行效率比动态链接方式快
动态链接
当我们程序运行时, 在我们需要使用到功能的时候,
就对我们的操作系统或者公共函数库进行查询,
查询到之后就进行动态的调用, 实现方式并不在程序本身,
这就是动态链接.
动态链接还可以达到节约内存的目的, 因为函数库都共用了.动态链接所生成的文件体积较小, 执行效率比静态链接方式慢
如有错误,请提出指正!谢谢.
本文由 花心胡萝卜 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: 2017-01-04 at 01:49 am