# C语言编译过程
源代码(.c) → 汇编(.s) → 目标文件(.o) → 可执行文件(.exe)
特点:
- 直接编译成机器码
- 可以直接被CPU执行
- 运行速度最快
- 平台相关(不同CPU架构需要重新编译)
# Python编译过程
源代码(.py) → 字节码(.pyc) → Python虚拟机(PVM)执行
特点:
- 编译成字节码(中间码)
- 需要Python解释器执行
- 运行速度相对较慢
- 跨平台(只要有Python环境就能运行)
# 对比示例
C语言:
```c
// hello.c
int main() {
int sum = 0;
for(int i = 0; i < 100; i++) {
sum += i;
}
return sum;
}
编译后的汇编代码:
main:
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-8], 0 # sum = 0
mov DWORD PTR [rbp-4], 0 # i = 0
jmp .L2
.L3:
mov eax, DWORD PTR [rbp-4]
add DWORD PTR [rbp-8], eax
add DWORD PTR [rbp-4], 1
.L2:
cmp DWORD PTR [rbp-4], 99
jle .L3
mov eax, DWORD PTR [rbp-8]
pop rbp
ret
Python:
# hello.py
def main():
sum = 0
for i in range(100):
sum += i
return sum
字节码(.pyc中的内容):
# 使用dis模块查看字节码
import dis
dis.dis(main)
输出类似:
2 0 LOAD_CONST 1 (0)
2 STORE_FAST 0 (sum)
3 4 SETUP_LOOP 26 (to 32)
6 LOAD_GLOBAL 0 (range)
8 LOAD_CONST 2 (100)
10 CALL_FUNCTION 1
12 GET_ITER
>> 14 FOR_ITER 14 (to 30)
16 STORE_FAST 1 (i)
主要区别:
- 编译结果:
-
- C语言编译到机器码(最底层)
- Python编译到字节码(中间层)
- 执行方式:
-
- C语言直接被CPU执行
- Python需要解释器解释执行
- 性能特点:
-
- C语言运行最快
- Python牺牲速度换取开发效率
- 跨平台:
-
- C语言需要重新编译
- Python字节码可跨平台使用
所以说它们确实类似,都是把源代码转换成更容易执行的格式,但层次和目的有所不同。