编译速度与运行时性能大对决:C、C++、Go、Rust谁是终极王者?

8561cec3e86364e9ab8c0d5f7d716afa.jpeg请点击上方蓝字TonyBai订阅公众号!

819a4a039b883f9075b7a626d6571aa2.png

在软件开发的世界里,选择一门合适的编程语言至关重要。编译速度影响开发效率,运行时性能决定程序表现。C、C++、Go和Rust作为当下热门的系统级编程语言,各自拥有拥趸。但它们在性能上究竟孰优孰劣?近期国外一位开发者通过自己的benchmark测试进行了一场真刀真枪的性能大比拼!并给出了一份详尽的基准测试报告。下面我们就来看看他的测试方法、测试结果以及最终给出的测试结论。

测试方法

本次测试采用“空循环”程序,排除业务逻辑干扰,聚焦语言和编译器本身的性能。我们使用两大工具:

  • Hyperfine:测量编译时间。

  • Perf Stat:深入分析运行时性能,包括执行时间、CPU 利用率、指令数、分支预测、缓存未命中等关键指标。

⚔️ 第一回合:编译速度

编译速度直接关系到开发者的“幸福感”。谁能更快地将代码转化为可执行程序呢?

语言

平均编译时间 (ms)

相对 C 的速度

C24.6 ± 0.9最快

Go

27.1 ± 1.5

慢 1.10 倍

Rust

107.5 ± 1.7

慢 4.36 倍

C++

249.7 ± 2.5

慢 10.13 倍

结果分析:

  • C语言 凭借其简洁的语法和成熟的编译器优化,拔得头筹。

  • Go语言 紧随其后,仅比C慢一点点。

  • Rust 编译时间显著增加,这与其复杂的类型系统、所有权检查以及LLVM后端有关。

  • C++ 垫底,模板实例化和复杂的编译过程拖慢了速度。

🏆 本轮胜者:C
如果你追求极致的编译速度,C语言是当之无愧的首选。但Go的表现也相当出色,对于大多数项目来说,这点差距几乎可以忽略不计。

⚡ 第二回合:运行时性能

编译完只是第一步,程序跑得快才是王道!接下来,我们将从多个维度考察四种语言的运行时表现。

1. 执行时间

语言

平均执行时间 (µs)

Go0.327 (327 ns)

C++

2

C

2.5

Rust

2.8

惊人结果:

  • Go语言 以惊人的327纳秒夺冠,将其他语言远远甩在身后!

  • C++位居第二,表现尚可。

  • C和Rust 相对较慢。

2. CPU 利用率 & 指令效率

语言

Task Clock (ms)

CPUs Utilized (%)

Instructions

Cycles

IPC

Go0.6373.7%

2,245,392

2,419,181

0.77

C++

0.67

72.8%

3,403,317

2,711,607

1.22

C

0.24

51.1%

942,153

964,819

0.96

Rust

0.32

53.6%

1,498,497

1,285,536

1.02

分析:

  • Go语言在CPU利用率和执行时间之间取得了很好的平衡。

  • C++虽然CPU利用率较高,但执行的指令和周期数也最多,可能存在优化空间。

  • Rust和C的IPC较高,表明指令流水线利用率较好。

3. 分支预测

语言

Branches

Branch Misses

Branch Miss Rate (%)

Go481,3046,3271.29%

C++

679,525

14,941

2.20%

C

211,875

4,110

1.94%

Rust

328,277

7,004

2.15%

分析:

  • Go语言以最低的分支预测错误率再次领先,这意味着它的程序控制流更高效。

  • C++分支预测错误率最高,可能影响性能。

4. 内存访问 (Page Faults)

语言

Page Faults

C62

Rust

76

C++

128

Go

205

分析:

  • C语言的内存访问最少,这得益于其精简的内存模型。

  • Go的缺页错误最多,这可能与运行时和垃圾回收有关。

5. 微架构分析

这里不再赘述具体数据,直接给出结论:

  • Go语言在指令退役、前端瓶颈和后端瓶颈之间表现均衡。

  • C++指令退役率最高,前端瓶颈较少。

  • Rust和C较为相似,Rust稍偏向前端瓶颈。

🏆 本轮胜者:Go
Go 语言在运行时性能上展现出压倒性优势,尤其是在执行时间和分支预测方面。

综合评定:Go语言加冕!

综合编译速度和运行时性能,Go 语言是本次性能大比拼的最终赢家! 它不仅编译速度快,而且运行时效率极高,是追求极致性能的开发者的理想选择。

指标

C

Go

Rust

C++

编译时间

🥇 最快

🥈

🥉

❌ 最慢

运行时执行时间

❌ 最慢

🥇 最快

🥉

🥈

分支预测

🥈

🥇 最佳

🥉

❌ 最差

CPU 利用率

❌ 低

🥇 高

🥈

🥉

内存使用(缺页)

🥇 最少

❌ 最多

🥈

🥉

总结与建议

  • 追求极致编译速度: 选择C。(笔者注:其实工程规模变大后,Go的编译速度远超C)

  • 追求极致运行时性能: 选择Go。

  • 注重安全和现代特性: 选择Rust,但要接受较慢的编译速度。

  • 需要高级抽象和模板: 选择C++,但要做好编译耗时的心理准备。

本次测试仅针对特定场景,实际项目还需具体分析。但Go语言在性能上的卓越表现,无疑为我们提供了一个强有力的选择!

  • 原文链接为https://open-note-2uog.vercel.app/post/5cd44eb0-a52c-462b-8561-7404c1cf1af2。


如果本文对你有所帮助,请帮忙点赞、推荐和转发b52b8decd5f0caf661dd6e2f60fddb06.png

点击下面标题,阅读更多干货!

Go稳居第7,Rust冲前10,新一代系统编程语言的觉醒?

2024年Go语言盘点:排名历史新高,团队新老传承 

-惊!Go在十亿次循环和百万任务中表现不如Java,究竟为何?

Go 1.24中值得关注的几个变化

Go encoding/json/v2提案:JSON处理新引擎

Go 1.24新特性前瞻:语法、编译器与运行时

Go 1.24新特性前瞻:工具链和标准库


Gopher部落知识星球在2025年将继续致力于打造一个高品质的Go语言学习和交流平台。我们将继续提供优质的Go技术文章首发和阅读体验。2025年将在星球首发“Go陷阱与缺陷”、“Go原理课”的专栏!此外,我们还会加强星友之间的交流和互动。欢迎大家踊跃提问,分享心得,讨论技术。我会在第一时间进行解答和交流。我衷心希望Gopher部落可以成为大家学习、进步、交流的港湾。让我相聚在Gopher部落,享受coding的快乐! 欢迎大家踊跃加入!

dd87883170b793f6b4ec896203cbc106.jpegebff3b5f77a8cfd6a5c02de399ad0ffe.png

c3c62a5f23951fa5cefce82b3986e7fe.pngbfaf6590d3331d45b46219fb81b339ee.jpeg

著名云主机服务厂商DigitalOcean发布最新的主机计划,入门级Droplet配置升级为:1 core CPU、1G内存、25G高速SSD,价格5$/月。有使用DigitalOcean需求的朋友,可以打开这个链接地址:https://m.do.co/c/bff6eed92687 开启你的DO主机之路。

Gopher Daily(Gopher每日新闻) - https://gopherdaily.tonybai.com

我的联系方式:

  • 微博(暂不可用):https://weibo.com/bigwhite20xx

  • 微博2:https://weibo.com/u/6484441286

  • 博客:tonybai.com

  • github: https://github.com/bigwhite

  • Gopher Daily归档 - https://github.com/bigwhite/gopherdaily

  • Gopher Daily Feed订阅 - https://gopherdaily.tonybai.com/feed

eb5901f689d049f48d71e024fa7dabd8.jpeg

商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值