mingw和Linux中的gcc和llvm编译器编译的pocketpy执行同一个python脚本的不同效果

我用的mingw是这个版本(https://github.com/brechtsanders/winlibs_mingw/releases/download/14.2.0posix-12.0.0-ucrt-r3/winlibs-x86_64-posix-seh-gcc-14.2.0-llvm-19.1.7-mingw-w64ucrt-12.0.0-r3.7z),也是目前同时具有gcc和llvm编译器的最高mingw版本。

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
相关推荐
Decay__4 小时前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
贞明电子6 小时前
工业三色报警灯怎么接入项目系统?开关量与RS485控制应用指南
运维·网络·微信公众平台·贞明电子
代码山河7 小时前
Python就业方向全解析:后端、爬虫、数据分析、AI你选哪个?
python·学习·架构·教程·面向对象·项目
在世修行7 小时前
智学文枢:题目流水线
python·多线程·状态机·pyside
HideF7 小时前
Linux
linux·服务器·网络
万联WANFLOW7 小时前
海外网络故障怎么排查?Cloudflare 三季度断网报告解读与 mtr 实战
运维·网络·故障分析
梯度下降者7 小时前
零基础入门Python 爬虫
爬虫·python·数据分析·入门指南·webcrawler
“AI国潮设计-小江”9 小时前
【AIGC实战】Python+Stable Diffusion打造“英歌舞财神”IP,解锁“马到成功”等爆款情绪营销文案设计
开发语言·人工智能·python·prompt·aigc
Ruiery9 小时前
Linux 6.6内核内存管理深度解析(十三):slab/slub 分配器
linux·运维·服务器
benchmark_cc10 小时前
用 Python 拉 A 股全市场实时快照:Notebook 请求、结果校验与易错点
python·数据分析·pandas·量化交易·股票数据·quantdash