程序编译
https://www.bilibili.com/video/BV1UV411B7qU?p=7 笔记
程序的本质
- 编译器 将 程序代码 转化成 CPU 指令/机器码;
- 指令装载到内存中;
- CPU 读取/写入 内存;
- CPU 控制计算机的硬件
CPU 中比较重要的组成
- 寄存器,信息存储
- 运算器,信息处理
- 控制器,控制其他器件进行工作
内存 & 寄存器
内存和寄存器都可以用来存放东西,但是寄存器就在 CPU 里面,CPU 访问它更快。
内存和寄存器调用示例:
数据的计算
int a = 1;
int b = a + 1
a, b 都存在内存中,数据会送到寄存器进行计算(+1),然后返回内存。
程序语言的发展
- 机器语言
- 汇编语言
- 高级语言
- 汇编语言 和 机器语言 是一一对应的,每一条 机器指令 都有与之对应的 汇编指令;
- 汇编 通过
编译
得到 机器语言,机器语言通过反汇编
得到汇编语言; - 高级语言可以通过编译得到汇编语言\机器语言,但汇编语言\机器语言几乎不可能还原成高级;
- 高级语言不能直接访问寄存器;
编程语言的本质区别
JS/PHP 代码最终会转化为机器码,但看不到这个机器码;引擎屏蔽了这些细节。
Java 会转化为字节码,由 JVM 装载
-
编译型语言
- C / C++ / OC / Swift
- 容易被反汇编 -
编译型语言(依赖虚拟机)
- Java / Ruby
- Java 由 JVM 进行装载字节码
- 虚拟机可以看做是小型操作系统 -
脚本语言
- Python / JS / PHP
- PHP 由ZE(Zend Engine)进行解析
编译语言要求全部都对才能执行;
脚本语言是一行一行去扫描执行,某一行出错,前面会继续执行,后面不会。效率比编译语言低,因为是运行时来处理。