一个简单例子说明为什么C语言在2013年仍很重要资料.pdfVIP

一个简单例子说明为什么C语言在2013年仍很重要资料.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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)

kehan123 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档