本文是《你真的理解"Hello world"吗?从编译链接到OS内核系列专题》的第一章的第一小节,主要介绍编译器的基本概念以及C语言程序的构建过程。全系列大纲如下:
前言
第1章 编译器的工作原理
1.1 编译器的基本概念及C语言程序的构建过程(本篇)
第2章 链接器的工作原理
第3章 深入分析ELF文件格式
第4章 动态链接库与静态链接库
第5章 程序的数据存储
第6章 函数参数、返回值的传递过程
第7章 虚拟内存
第8章 程序的加载和重定位
第9章 程序在内存中的布局
第10章 带你重新认识main()函数
第11章 从应用程序到系统调用
第12章 程序的退出和资源回收
本系列专题将带你了解"Hello World"背后隐藏的那些极为重要却又鲜为人知的底层技术,让你对计算机系统的基本原理有一个全面深刻的理解。有兴趣的童鞋,不妨关注一下吧!
注:本篇的重点是介绍基本概念,让童鞋们对C语言程序构建过程有一个整体的了解,后续会有专门的章节详细介绍编译、链接的实现原理等技术细节,敬请期待!
引子
人与人之间可以通过文字语言或者肢体语言进行交流,海豚之间通过发出不同频率的“脉冲声”进行交流,计算机之间则通过由0和1组成的电信号进行交流。
那么,人与计算机之间如何进行交流呢?这就不得不用到编译器了。
![d69dd010ae638e974a4b816a92f872af.png](https://i-blog.csdnimg.cn/blog_migrate/cb3d4b42cb543e555252c761fe025091.jpeg)
编译器是什么
简单来讲,编译器就是把一种语言(通常是某种高度抽象的高级语言)转化为另一种语言(通常是某种低级语言)的计算机程序。
编译器要解决的根本问题
人类无法直观地理解电信号所携带的信息,同样,计算机也无法理解人类使用的自然语言所表达的含义。
因此,要想让计算机能够“听懂”人话,帮人办事儿,就必须要能够把人类的语言,翻译成计算机能够识别的二进制机器指令。而这,就是编译器所要解决的最根本的问题。