程序是如何编译执行的,背后都发生了什么
来源:互联网 发布:厦门哪里看海最好 知乎 编辑:程序博客网 时间:2024/05/22 10:50
一个程序从源文件test.c到可执行程序test.o,一共经历了以下步骤:
这是一个源程序到可执行程序所经历的过程,但是这每个小阶段,编译器都做了些什么呢?
1.预处理器处理:
1).头文件的包含,预处理指令#include用于处理头文件的包含,头文件有两种形式,< xxx>和“xxx”,#include< xxx>所包含的头文件,是告诉编译器,该头文件所包含的内容从系统中去查找,#include”xxx”,是告诉编译器,该头文件所包含的文件先从用户目录去寻找,如果没有,再去系统中找;
2)#include 预处理标识符的替换;
3).宏的替换,宏在预处理阶段,宏就在源文件中完全展开;
4).注释删除;
这个阶段生成 .i文件
2.编译阶段:
1).语法分析;
2).词法分析;
3).语义分析;
4).符号分析;
也就是在这个阶段检查代码的语法错误,缺少符号等错误;这个阶段生成的是 .s文件;把代码转换成汇编代码;
3.汇编阶段:
1).汇编转换成二进制文件;
2).符号表的合并;
4.链接:
1).合并段表;
合并段表就是编译器需要传递编译后的全部二进制代码的段表,连接器将所有的段表合并;
2).符号表的合并和符号表的重定义;
阅读全文
0 0
- 程序是如何编译执行的,背后都发生了什么
- VS 下程序编译的过程发生了什么
- 当一个.NET托管程序运行时都发生了什么,关闭时发生了什么
- 2013都发生了什么?
- web请求操作背后发生了什么?
- 对象在创建的时候都发生了什么?
- myeclipse 保存的时候都发生了什么
- 敲下百度都发生了什么
- 输入URL之后都发生了什么
- HTTPS建立连接都发生了什么
- https连接都发生了什么
- Linux系统启动时都发生了什么
- Struts2学习(四):Action执行的时候发生了什么
- 当执行[object selector:para]的时候,发生了什么?
- 执行ping操作的时候发生了什么?
- 动态代理的疑问:在程序的编译阶段,new操作都做了什么
- C/C++的编译过程中到底发生了什么?
- 让你头晕的VR头显,背后发生了什么?
- PHP之in_array()方法
- C# 静态方法使用
- [cvpr2017]Unsupervised Pixel–Level Domain Adaptation with Generative Adversarial Networks
- kubernetes 1.6集群再遇rbac问题(helm安装spark)
- 数据库分库分表中间件 Sharding-JDBC 源码分析 —— SQL 解析(四)之插入SQL
- 程序是如何编译执行的,背后都发生了什么
- Xcode多种Build Configuration配置使用
- 基数排序-------------->_<
- Mac OS sublime text3 python插件
- AutoCompleteTextview和Spinner的使用
- I/O流
- 浅谈MySQL中优化sql语句查询常用的30种方法
- 使用Spring Boot快速构建基于SQLite数据源的应用
- JS 遍历 json 和 JQuery 遍历json