目录
一、前言
最近在学习c++多态的时候遇到了一个问题,因为多态分为静态多态和动态多态,然后它俩的区别是静态多态在编译阶段就确定了函数地址,而动态多态在运行阶段确定函数地址。
但是我对代码的编译阶段和运行阶段了解还是有些薄弱,然后查了相关的资料,于是想记录下加深下印象,同时写下自己关于编译和运行的理解。
二、编译
编译的基本概念就是将你写的c++代码转换为机器可以执行的二进制代码,然后这个过程由编译器执行。
通常它会有以下几个步骤:
- 预处理:编译器处理源代码中的预处理指令比如:#include引入头文件,#define宏定义,删 除注释等。
- 词法分析和语法分析:这个过程就像是理解题目的意思,编译器会检查你的源代码是否符合 C++的语法规则,比如是否有拼写错误、括号是否匹配等。
- 语义分析:就像你理解题目的意图一样,编译器会检查你的源代码是否有意义,比如变量是否声明了类型、函数是否有正确的参数等。
- 生成目标代码:如果前面的步骤都通过了,编译器就会开始“翻译”你的源代码,将其转换为计算机能理解的机器语言(二进制格式)。
以上就是编译的基本步骤, 编译之后你还会得到你会得到一个或多个“翻译后”的答案文件(目标文件),这些文件包含了计算机可以执行的指令。
三、运行
在编译阶段得到了目标文件之后,我们还需要一个执行者(操作系统和加载器)来执行这些指令,这就是运行阶段。
运行步骤如下:
- 加载:操作系统会负责把你的答案文件加载到计算机的内存中,并为它分配必要的资源。
- 准备执行环境:加载器会设置程序的初始执行环境,比如设置堆栈、寄存器等。
- 执行:一旦准备就绪,CPU就会开始逐条执行内存中的指令,就像你按照步骤解答数学题一样。
执行完成后,你会看到程序的输出结果,就像你解出数学题的答案一样。
四、总结
简单来说,编译就像是把你的C++代码翻译成计算机能理解的语言,而运行则是让计算机执行这些指令并得到结果。
举一个例子:你在facebook遇到了一个老外,但是你不懂他说的外国话,然后你使用了网易词典翻译,在翻译过程中,词典进行了语法检查,看看是否有语法错误,同时对代码进行浓缩精简,最后得到了我们可以理解的中文。