- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[一个简单例子说明为什么C语言在2013年仍很重要
一个简单例子说明为什么C语言在2013年仍很重要导读:本文作者在开发Dynym项目,这是一个动态语言的通用运行时。在开发时,作者以其他语言的运行速度作为基础比较语言的运行速度,因此发现了一些小秘密。迭代计算斐波那契数列是测试各种语言执行速度的常见方法。作者以不同的语言进行测试,最终发现C语言要比Python编写的计算斐波那契数列快278.5倍。在底层开发,以及专注性能的应用程序中,选择是显而易见的。而为什么会有如此大的运行性能差距呢。作者进一步研究了程序的反汇编代码,发现差别出在内存的访问次数,以及预测的CPU指令的正确性方面。(感谢?乾龙_ICT?的热心翻译。如果其他朋友也有不错的原创或译文,可以尝试提交到伯乐在线。)以下是译文。原作者注:在本文最开始,我并没说明进行模2^64的计算——我当然明白那些不是“正确的”斐波那契数列,其实我不是想分析大数,我只是想探寻编译器产生的代码和计算机体系结构而已。最近,我一直在开发Dynvm——一个通用的动态语言运行时。就像其他任何好的语言运行时项目一样,开发是由基准测试程序驱动的。因此,我一直在用基准测试程序测试各种由不同语言编写的算法,以此对其典型的运行速度有一个感觉上的认识。一个经典的测试就是迭代计算斐波那契数列。为简单起见,我以2^64为模,用两种语言编写实现了该算法。用Python语言实现如下:12345678910def fib(n):????SZ = 2**64????i = 0????a, b = 1, 0????while i n:????????t = b????????b = (b+a) % SZ????????a = t????????i = i + 1????return b用C语言实现如下:1234567891011121314151617181920#include stdio.h#include stdlib.htypedef unsigned long ulong;?int main(intargc, char *argv[]){????ulong n = atoi(argv[1]);????ulong a = 1;????ulong b = 0;????ulong t;?????for(ulongi = 0; i n; i++) {????????t = b;????????b = a+b;????????a = t;????}?????printf(%lu\n, b);????return 0;}用其他语言实现的代码示例,我已放在github上。Dynvm包含一个基准测试程序框架,该框架可以允许在不同语言之间对比运行速度。在一台Intel i7-3840QM(调频到1.2 GHz)机器上,当 n=1,000,000 时,对比结果如下:1234567=======================================================??语言?????????????????????????????? 时间 (秒)=======================================================??Java?????????????????????????????? 0.133??C Language???????????????????????? 0.006??CPython??????????????????????????? 0.534??Javascript V8????????????????????? 0.284很明显,C语言是这里的老大,但是java的结果有点误导性,因为大部分的时间是由JIT编译器启动(~120ms)占用的。当n=100,000,000时,结果变得更明朗:1234567=======================================================??语言????????????????????????????? 时间(秒)=======================================================??Java?????????????????????????????? 0.300??C Language???????????????????????? 0.172??CPython??????????????????????????? 47.909??Javascript V8????????????????????? 24.179在这里,我们探究下为什么C语言在2013年仍然很重要,以及为什么编程世界不会完全“跳槽”到Python或者V8/Node。有时你需要原始性能,但是动态语言仍在这方面艰难挣扎着,
您可能关注的文档
- [“洗鼻”将像刷牙一样普及鼻露洁唤醒鼻腔护理市场.docx
- [“法与人文”的方法论意义下.doc
- [“激发学生学习语文的兴趣”研究报告.doc
- [“海底捞”背后的故事.doc
- [“潮人商会”在北京.doc
- [“无线USB数据线”使用的介绍.doc
- [“独一无二”的营销体验奢侈品牌高级定制的密码.docx
- [“生活化”让信息技术课堂更有效.doc
- [“生态环境”用语产生的特殊时代背景.doc
- [“牵益生活卡”优惠率一览表.doc
- 食品饮料深度研究:破局与重构:中国软饮行业的发展新纪元.pdf
- AI智慧校园建设综合解决方案(45页PPT).pptx
- App浪潮下的数据安全和个人信息保护监管解决方案(33页PPT).pptx
- K3WISE智能制造解决方案(39页PPT).pptx
- 122工业互联网基本概念及关键技术(294页PPT).pptx
- PeopleSoft概述组织架构和人事管理(124页PPT).ppt
- 72智慧工业园区环境监测一体化解决方案(53页PPT).ppt
- AWS数据湖和大数据服务介绍(45页PPT).pptx
- 城市规建管一体化平台建设方案(43页PPT).pptx
- 96科技园区规划设计方案智慧科技园规划设计方案(43页PPT).pptx
文档评论(0)