- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一个简单例子说明为什么C 语言在2013年仍很重要
导读:本文作者在开发Dynym 项目,这是一个动态语言的通用运行时。在开发时,
作者以其他语言的运行速度作为基础比较语言的运行速度,因此发现了一些小秘
密。迭代计算斐波那契数列是测试各种语言执行速度的常见方法。作者以不同的
语言进行测试,最终发现C 语言要比Python 编写的计算斐波那契数列快278.5
倍。在底层开发,以及专注性能的应用程序中,选择是显而易见的。而为什么会
有如此大的运行性能差距 。作者进一步研究了程序的反汇编代码,发现差别出
在内存的访问次数,以及预测的CPU 指令的正确性方面。(感谢 乾龙_ICT 的
热心翻译。如果其他朋友也有不错的原创或译文,可以尝试提交到伯乐在线。)
以下是译文。
原作者注:在本文最开始,我并没说明进行模2^64 的计算——我当然明白那些
不是 “正确的”斐波那契数列,其实我不是想分析大数,我只是想探寻编译器产
生的代码和计算机体系结构而已。
最近,我一直在开发Dynvm——一个通用的动态语言运行时。就像其他任何好的
语言运行时项目一样,开发是由基准测试程序驱动的。因此,我一直在用基准测
试程序测试各种由不同语言编写的算法,以此对其典型的运行速度有一个感觉上
的认识。一个经典的测试就是迭代计算斐波那契数列。为简单 见,我以2^64
为模,用两种语言编写实现了该算法。
用Python 语言实现如下:
1 def fib(n):
2 SZ = 2**64
3 i = 0
4 a, b = 1, 0
5 while i n:
6 t = b
7 b = (b+a) % SZ
8 a = t
9 i = i + 1
10 return b
用C 语言实现如下:
1 #include stdio.h
2 #include stdlib.h
3 typedef unsigned long ulong;
4
5 int main(int argc, char *argv[])
6 {
7 ulong n = atoi(argv[1]);
8 ulong a = 1;
9 ulong b = 0;
10 ulong t;
11
12 for(ulong i = 0; i n; i++) {
13 t = b;
14 b = a+b;
15 a = t;
16 }
17
18 printf(%lu\n, b);
19 return 0;
20 }
用其他语言实现的代码示例,我已放在github 上。
Dynvm 包含一个基准测试程序框架,该框架可以允许在不同语言之间对比运行速
度。在一台Intel i7-3840QM (调频到1.2 GHz)机器上,当 n=1,000,000 时,
对比结果如下:
1 =======================================================
2 语言 时间 (秒)
3 =======================================================
4 Java 0.133
5 C Language 0.006
6 CPython 0.534
7 Javascript V8 0.284
很明显,C 语言是这里的老大,但是java 的结果有点误导性,因为大部分的时
间是由JIT 编译器启动 (~120ms)占用的。当n=100,000,000 时,结果变得更明
朗:
1 =============================
文档评论(0)