对上层用户/开发人员
对硬件的性能影响
提前声明:以下内容来自AI,不一定符合实际。
一、C++ 编译--执行流程:
源代码(.cpp) ↓ 预处理器 → 处理#include, #define等宏 ↓ 编译前端 → 词法分析、语法分析、语义分析 ↓ (生成抽象语法树AST) 编译中端 → 中间代码生成(LLVM IR) ↓ (平台无关优化) 编译后端 → 目标代码生成(x86/ARM等) ↓ 汇编器 → 生成目标文件(.obj/.o) ↓ 链接器 → 合并多个目标文件+库文件 ↓ 可执行文件(.exe/.elf) ↓ 操作系统加载器 → 分配内存,创建进程 ---- 开始执行 ↓ CPU直接执行 → 机器指令在CPU流水线中运行二、Python 执行流程:
注意,python语言没有编译流程,C++是编译+执行性语言,python是解释执行性语言。
源代码(.py) ↓ 词法分析器 → 生成Token流 ↓ 语法分析器 → 生成抽象语法树(AST) ↓ 编译为字节码 → 生成.pyc文件(可选) ↓ Python虚拟机 → 解释执行字节码 ↓ Python运行时 → 管理对象、内存、异常等 ↓ C API层 → Python对象到C结构的转换 ↓ 操作系统调用 → 通过libc等C库 ↓ 硬件执行可见,C++的类型检查,词法和语法分析等在编译阶段就已经由编译器完成,无需在执行阶段耗费时间;但是python没有编译阶段,所有工作需要再执行阶段进行,而且python是C语言的转换,运行是需要转到C语言,又耗费时间。
--python解释器(对于官方Cpython版本),主要基于C语言实现。
python虚拟机的作用
python解释器是一个"软件实现的CPU”,专门用来执行python代码。
python解释器是一个"软件实现的CPU”,专门用来执行python代码,python代码由python解释器执行,再由python解释器调用C接口实现和硬件的交互执行。
层级结构:
你的Python代码 ↓ Python解释器(软件实现的虚拟机) ↓ 1. 解释执行字节码(纯软件,Python实现) ↓ 2. 调用C实现的内部函数(性能关键部分) ↓ C标准库和系统调用接口(libc等) ↓ 操作系统内核 ↓ 硬件总结对比
| 层面 | C++ | Python |
|---|---|---|
| 编译/执行 | 编译为机器码 | 解释字节码 |
| 类型检查 | 编译时(零运行时开销) | 运行时(每次操作都检查) |
| 内存访问 | 直接、连续 | 间接、通过PyObject |
| 函数调用 | 直接跳转/内联 | 字典查找+动态解析 |
| 硬件交互 | 直接内存操作 | 必须通过C扩展 |
| 优化时机 | 编译时深度优化 | 运行时有限优化 |
| 确定性 | 执行时间可预测 | GC等导致非确定性延迟 |