- 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 高效程序的设计
C 高效程序设计
C++高效程序设计
最近开发的一个程序,对代码的速度要求很高,同时由于已实现的代码速度不能满足要求,因此进行了搜索。收藏此篇。
摘要
不管是否愿意承认,每个人都希望程序的运行速度越快越好。每天人们都你追我赶,好像明天就是末日。而同时,公关部的那些家伙则不停的吼叫着,说他们的新引擎比其他人的更快更好。
我并不打算告诉你如何让你的代码跑得比别人的快。我只是想告诉你,如何让你的代码更快、更高效,当然,是跟你原来的代码相比。
我讲述的内容主要涉及三个概念,这三者之间的关系相当复杂:
1、代码执行时间
2、代码/程序大小
3、程序设计本身的开支
我始终坚信应该保持这三者之间的平衡,尤其在某些情况下,2、3两项直接影响了代码的执行时间。
在本文中,我将讲述一些可能有助于你提高代码执行效率的方法。我会从最简单的优化方法开始,然后逐渐深入到那些比较复杂的技术。现在我们首先从一个不太显眼的地方开始:编译器。
考虑到读者中有一些经验丰富的程序员,我的叙述会尽可能简单,以避免因为细节太多而显得杂乱不堪。
第一节公欲善其事,必先利其器
这一节的内容似乎不说也罢,不过仔细想想,你对你手中的编译器到底了解多少?你知道它可以为哪些处理器生成代码吗?你知道它可以进行哪些类型的优化吗?你知道它的语言不兼容性吗?
当你想要写出点什么的时候,尤其是当你希望你的代码运行如飞的时候,了解这些内容将是至关重要的。
举例来说,最近在GameDev的讨论组里有人问关于Microsoft Visual C++的Release Mode的问题。这是一个标准编译器选项,如果你使用特定的编译器,你就应该知道它的意思。如果你不知道,那很遗憾,你并不真正会使用你花费了大量的金钱买来的东西。简单来说,Release Mode会删除所有debug用的代码,进行所有可能的编译代码优化,生成更小的可执行文件,还让这个文件运行的更快。它可能还会有一些其它的功能,如果你感兴趣,请阅读编译器的相关文档。
看到了吧,如果你以前并不知道这个Release Mode,我现在就可以告诉你一个让你的代码运行更快的方法,而且这个方法不需要你修改任何代码!
目标平台也是非常重要的。现在,你遇到的最低档的可能就是Intel Pentium处理器了,不过如果你使用10年前的编译器,那么它不会做任何针对Pentium的优化。去找一个最新的编译器,它可能会大大提高程序的运行速度,同样,也不需要你对代码做任何的修改。
另外还要注意一些事:你的编译器有没有代码分析(profiling)工具?如果你连这个都不知道,那么你就不要指望编写出更快的代码了。如果你还不知道什么是代码分析工具,那么你还需要更多的学习。一个代码分析工具就是一个用来获得程序的运行时间的东东。你在代码分析器(profiler)中运行你的程序,做一些操作,然后再从你的程序中退出,就可以获得一个关于每个函数耗时的报告。你可以根据这个报告找到代码的运行瓶颈--就是你的代码中花费时间最多的部分。对这些部分作一些特定的优化比随随便便的在每个地方都做一点优化效果要好多了。
不要说但是我知道我的瓶颈在哪!它们可不是光用脑子就可以找到的,尤其是在使用第三方API和程序库时。几个星期前我还遇到一个类似的问题,在一个视频程序里,显示每一帧时都会莫名其妙的产生状态切换,而这个动作占用了总执行时间的25%。通过简单的添加一条测试语句(测试状态是否已经被设置),我把相应的那个函数从分析得到的50个最昂贵的函数列表中剔除了。
看上去在大多数情况下,使用分析器可以很容易达到目的,但事实上并非如此。你必须找到程序中的关键路径。所谓关键路径就是程序大部分运行时间都在执行的路径。对关键路径进行优化可以显著的提高运行效率,你的用户也会因此而高兴。
另一种情况是,也许你发现在某个函数中,时间开支最大的步骤是装载一个特定的文件,但是你知道这种情况只会在应用程序启动时发生一次。对这个函数进行优化也许可以让程序的总运行时间减少几秒钟,但不会提升正常使用时的效率。事实上,这表明你没有进行足够的代码分析,因为在正常使用时,这个函数所占用的时间百分比将会越来越低,而你的关键路径所占用的时间百分比将会一路飙升。
我想以上这些内容能够使你对这些工具有了一些了解。
代码分析工具实在是太好了,记得一定要用!
如果你还没有代码分析器,你可以试试Intel的VTune profiler。你可以免费试用它一个月。在下面这个网址下载它。
在本文的下一部分,我将告诉你如何让你的C/C++编译器做你想让它做的事。
第二节Inlining,inline关键字
什么是inlining?我会通过描述inline关键字来回答这个问题。
Inline关键字告诉编译器在适当的地方展开函数,它工作起来很像是C和C++中的宏(#
您可能关注的文档
- “眼球对眼球的权利”——对质权制度比较研究_民法论文_法律论文__5414.doc
- “铁屋子”或“家”的民族寓言——论中国电影的一个原型叙事结构及其变形_电视电影论文_艺术论文__4563.doc
- 《催醒术》——1909年发表的“狂人日记”_现当代文学论文_文学论文__264.doc
- 《春望》五种英译文的比较研究,英语翻译学论文-_3168【论文全集】.doc
- “整理国故运动”与国学研究的学科重建_国学论文_哲学论文__3348.doc
- 侦查程序的正当化是我国法治建设发展的需要,侦查论文-_182【论文大全】.doc
- 从文化视角研究《红楼梦》中委婉语的翻译,英语翻译学论文-_194【论文大全】.doc
- 中国左翼文学、京海派文学及其在当下的意义_现当代文学论文_文学论文__195.doc
- 信息技术与教育相整合的进程,教育管理论文.doc
- 大学语文课程建设的一些建议,语文教育论文-_577【论文大全】.doc
- 2026中国船舶集团第七一一研究所校园招聘备考题库完整参考答案详解.docx
- 2026中国航天科技集团公司第七研究院重庆航天设计院招聘备考题库及答案详解(夺冠系列).docx
- 2026中煤科工集团新疆研究院有限公司全球校园招聘12人备考题库附答案详解(预热题).docx
- 2026年中国六甲基环三硅氧烷市场分析及投资战略研究预测可行性报告.docx
- 2026年中国麻纱市场产销分析与盈利前景预测报告.docx
- 2026年中国脉冲测量仪行业市场规模及投资前景预测分析报告.docx
- 2026年中国毛染整精加工行业市场监测与未来发展策略咨询报告(定制版).docx
- 浙江国企招聘-2025宁波国有资本研究院有限公司招聘5人备考题库及答案详解(必刷).docx
- 赣州市赣县区文化旅游投资集团有限公司旗下子公司招聘劳务派遣制工作人员备考题库含答案详解(能力提升).docx
- 2026中电科发展规划研究院有限公司校园招聘10人备考题库及答案详解(必刷).docx
最近下载
- (正式版)DB42∕T 1760-2021 《城市道路照明设施运维检修规范》.pdf VIP
- 食品理化检验技术模拟考试题与参考答案.docx VIP
- 2026届郑州市金水区九年级化学第一学期期末复习检测试题含解析.doc VIP
- 医疗机构销毁麻醉药品、第一类精神药品申请表.xls VIP
- 共青团2025年工作总结及2026年工作打算.docx VIP
- 概率论和数理统计期末考试题库(含答案).doc VIP
- 医务人员职业接触防护处置标准操作规程.pdf VIP
- 深信服HCI超融合主打PPT_V6.7.0_1130 (5).pptx VIP
- 麦语言基本语法与指令说明.pdf VIP
- 00634自考广告策划重点详细最全.docx VIP
原创力文档


文档评论(0)