计算机基础知识第五期——程序是如何执行的

一、程序在计算机中是怎么执行的?
计算机只认 0 和 1(二进制指令),不认代码、文字、逻辑。
执行的本质只有三步:
1. 取指令:CPU 从内存里读一条二进制指令
2. 译指令:控制单元看懂这条指令要干嘛
3. 执行指令:运算、读写内存、跳转、输入输出…
循环往复,直到程序结束。
你写的所有代码,最终都会变成:
- 一串二进制
- 在 CPU 里被流水线执行
二、高级语言怎么转成二进制?
1)C / C++:编译型语言(直接变机器码)
完整流程:
源码 .c/.cpp → 预处理器 → 编译 → 汇编 → 链接 → 可执行文件(机器码)
- 编译:把高级语言 → 汇编
- 汇编:汇编 → 机器码(二进制)
- 链接:把你写的代码 + 库函数 → 一个可执行文件(.exe / ELF)
最终得到的是本地 CPU 可直接跑的二进制。
2)Java:半编译半解释(先编译为字节码)
流程:
.java → 编译器 → .class(字节码) → JVM 解释/即时编译(JIT) → 机器码
- Java 编译器不直接生成机器码,而是字节码(中间格式)
- JVM 在运行时把字节码翻译成当前系统的机器码
- JIT 会把热点代码编译成本地二进制,加速运行
3)Python:解释型语言(运行时翻译)
流程:
.py → 解释器 逐行读取 → 逐行翻译成机器码 → 立刻执行
现代 CPython 内部也会先生成字节码 .pyc,再由虚拟机执行。
特点:边译边跑,不提前生成完整二进制可执行文件。
三、一个程序完整执行过程(从双击到结束)
这是最硬核、最完整的真实流程:
1. 双击程序
操作系统接管,找到可执行文件。
2. 加载到内存
OS 把:
- 代码段(指令)
- 数据段(全局变量、常量)
- 堆、栈空间
全都读到内存。
3. 建立进程 + 分配资源
分配 PID、内存、文件描述符、环境变量等。
4. CPU 从入口地址开始执行
从 main 或程序入口开始:
取指 → 译码 → 执行 → 访存 → 写回 → 程序计数器 PC+1
5. 运行中
- 函数调用 → 用栈保存返回地址、局部变量
- 动态内存 → 在堆上分配
- 系统调用 → 向 OS 请求:打印、文件、网络等
6. 程序结束
- 退出 main
- OS 回收内存、关闭文件、销毁进程

极简总结
- C/C++:源码 → 编译 → 直接变机器码
- Java:源码 → 字节码 → JVM → 机器码
- Python:源码 → 解释器/字节码 → 边跑边译
- 程序执行本质:CPU 不断取指、译码、执行二进制指令


评论