程序编译


https://www.bilibili.com/video/BV1UV411B7qU?p=7 笔记


程序的本质

  • 编译器 将 程序代码 转化成 CPU 指令/机器码;
  • 指令装载到内存中;
  • CPU 读取/写入 内存;
  • CPU 控制计算机的硬件

CPU 中比较重要的组成

  • 寄存器,信息存储
  • 运算器,信息处理
  • 控制器,控制其他器件进行工作

内存 & 寄存器

内存和寄存器都可以用来存放东西,但是寄存器就在 CPU 里面,CPU 访问它更快。

内存和寄存器调用示例:
数据的计算

int a = 1;
int b = a + 1

a, b 都存在内存中,数据会送到寄存器进行计算(+1),然后返回内存。


程序语言的发展

  1. 机器语言
  2. 汇编语言
  3. 高级语言
  • 汇编语言 和 机器语言 是一一对应的,每一条 机器指令 都有与之对应的 汇编指令;
  • 汇编 通过 编译 得到 机器语言,机器语言通过 反汇编 得到汇编语言;
  • 高级语言可以通过编译得到汇编语言\机器语言,但汇编语言\机器语言几乎不可能还原成高级;
  • 高级语言不能直接访问寄存器;

编程语言的本质区别

JS/PHP 代码最终会转化为机器码,但看不到这个机器码;引擎屏蔽了这些细节。
Java 会转化为字节码,由 JVM 装载

  • 编译型语言
    - C / C++ / OC / Swift
    - 容易被反汇编

  • 编译型语言(依赖虚拟机)
    - Java / Ruby
    - Java 由 JVM 进行装载字节码
    - 虚拟机可以看做是小型操作系统

  • 脚本语言
    - Python / JS / PHP
    - PHP 由ZE(Zend Engine)进行解析


编译语言要求全部都对才能执行;
脚本语言是一行一行去扫描执行,某一行出错,前面会继续执行,后面不会。效率比编译语言低,因为是运行时来处理。


posted @ 2021-01-26 07:03  月思  阅读(149)  评论(0编辑  收藏  举报