mingw clang 编译比gcc快1秒多, 但耗内存是gcc的6倍(36M vs 6M), 编译出来的二进制文件执行python脚本反而快 2 倍多。
--不加O3优化的编译时间
C:\d>timer64 gcc mainpo.c pocketpy.c -o pocketpygcc.exe --std=c11 -Lc:\d\mingw64\x86_64-w64-mingw32\lib -lws2_32
Kernel Time = 0.015 = 0%
User Time = 0.000 = 0%
Process Time = 0.015 = 0% Virtual Memory = 2 MB
Global Time = 3.359 = 100% Physical Memory = 6 MB
C:\d>timer64 clang mainpo.c pocketpy.c -o pocketpycl.exe --std=c11 -Lc:\d\mingw64\x86_64-w64-mingw32\lib -lws2_32 -pthread
Kernel Time = 0.031 = 1%
User Time = 0.031 = 1%
Process Time = 0.062 = 3% Virtual Memory = 14 MB
Global Time = 1.974 = 100% Physical Memory = 36 MB
--加O3优化的编译时间和执行脚本时间
C:\d>timer64 gcc mainpo.c pocketpy.c -o pocketpygcc.exe --std=c11 -Lc:\d\mingw64\x86_64-w64-mingw32\lib -lws2_32 -O3
Kernel Time = 0.015 = 0%
User Time = 0.000 = 0%
Process Time = 0.015 = 0% Virtual Memory = 2 MB
Global Time = 10.223 = 100% Physical Memory = 6 MB
C:\d>timer64 pocketpygcc.exe primes.py
Kernel Time = 0.140 = 1%
User Time = 9.203 = 97%
Process Time = 9.343 = 99% Virtual Memory = 517 MB
Global Time = 9.404 = 100% Physical Memory = 487 MB
C:\d>timer64 clang mainpo.c pocketpy.c -o pocketpycl.exe --std=c11 -Lc:\d\mingw64\x86_64-w64-mingw32\lib -lws2_32 -pthread -O3
Kernel Time = 0.062 = 0%
User Time = 0.031 = 0%
Process Time = 0.093 = 1% Virtual Memory = 14 MB
Global Time = 8.983 = 100% Physical Memory = 36 MB
C:\d>timer64 pocketpycl.exe primes.py
Kernel Time = 0.015 = 0%
User Time = 4.078 = 98%
Process Time = 4.093 = 98% Virtual Memory = 517 MB
Global Time = 4.157 = 100% Physical Memory = 486 MB
而Linux中的gcc和clang,虽然编译速度还是clang更快,差不多是gcc的2倍,但编出来的二进制文件执行python脚本差不多一样快。
拉取clang镜像,运行并登录容器。
root@DESKTOP-59T6U68:/mnt/c/d# docker pull docker.1ms.run/silkeh/clang
Trying to pull docker.1ms.run/silkeh/clang:latest...
Getting image source signatures
Copying blob 26996d003dd4 done
Copying blob 79f4901c3d66 done
Copying blob ad6841004396 done
Copying config dd6cc22a26 done
Writing manifest to image destination
Storing signatures
dd6cc22a261e1b62937bdc472c4a2c9d5496f3ba550532517169e2ce1f324597
root@DESKTOP-59T6U68:/mnt/c/d# docker pull ghcr.io/silkeh/clang
Trying to pull ghcr.io/silkeh/clang:latest...
Getting image source signatures
Copying blob ad6841004396 skipped: already exists
Copying blob 26996d003dd4 skipped: already exists
Copying blob 79f4901c3d66 skipped: already exists
Copying config dd6cc22a26 done
Writing manifest to image destination
Storing signatures
dd6cc22a261e1b62937bdc472c4a2c9d5496f3ba550532517169e2ce1f324597
root@DESKTOP-59T6U68:/mnt/c/d# docker run -itd --name clang -v /mnt/c/d:/par --network host ghcr.io/silkeh/clang
fc5967b139fac7363006bdd6238b7425e403bed48a2162e2e230aef557c4114d
root@DESKTOP-59T6U68:/mnt/c/d# docker exec -it clang bash
在clang容器中编译,
root@DESKTOP-59T6U68:/# cd /par
root@DESKTOP-59T6U68:/par# clang mainpo.c pocketpy.c -o pocketpycl -pthread
root@DESKTOP-59T6U68:/par# ./pocketpycl
pocketpy 2.1.8 (May 7 2026, 12:32:28) [64 bit] on linux (DEBUG)
https://github.com/pocketpy/pocketpy
Type "exit()" to exit.
>>>
root@DESKTOP-59T6U68:/par# time clang mainpo.c pocketpy.c -o pocketpycl -pthread -O3
real 0m5.300s
user 0m5.218s
sys 0m0.110s
root@DESKTOP-59T6U68:/par# time ./pocketpycl primes.py
real 0m4.176s
user 0m3.735s
sys 0m0.510s
root@DESKTOP-59T6U68:/par# clang --version
Debian clang version 21.1.8 (++20251221032947+2078da43e25a-1~exp1~20251221153113.67)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/lib/llvm-21/bin
root@DESKTOP-59T6U68:/par#
在gcc容器中编译
root@DESKTOP-59T6U68:/mnt/c/d# docker start gcc
gcc
root@DESKTOP-59T6U68:/mnt/c/d# docker exec -it gcc bash
root@6ae32a5ffcde:/# cd par
root@6ae32a5ffcde:/par# time gcc mainpo.c pocketpy.c -o pocketpygcc -pthread -O3
real 0m9.641s
user 0m8.971s
sys 0m0.552s
root@6ae32a5ffcde:/par# time ./pocketpygcc primes.py
real 0m3.616s
user 0m3.132s
sys 0m0.482s
root@6ae32a5ffcde:/par#
root@6ae32a5ffcde:/par# time ./pocketpycl primes.py
real 0m3.853s
user 0m3.640s
sys 0m0.530s
root@6ae32a5ffcde:/par# time ./pocketpygcc primes.py
real 0m3.703s
user 0m3.198s
sys 0m0.498s