高级编程语言提供地函数

高级编程语言提供地函数

ID:28971912

大小:141.00 KB

页数:11页

时间:2018-12-15

高级编程语言提供地函数_第1页
高级编程语言提供地函数_第2页
高级编程语言提供地函数_第3页
高级编程语言提供地函数_第4页
高级编程语言提供地函数_第5页
资源描述:

《高级编程语言提供地函数》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实用标准文案高级编程语言提供的函数、条件语句和循环这样的抽象编程构造极大地提高了编程效率。然而,这也潜在地使性能显著下降成为了用高级编程语言写程序的一大劣势。在理想条件下,在不以性能为妥协的情况下,你应该写出易读并且易维护的代码。因此,编译器尝试自动优化代码以提高其性能,当今的编译器都深谙其道。编译器可以转化循环、条件语句和递归函数、消除整块代码和利用目标指令集的优势让代码变得高效而简洁。所以对程序员来说,写出可读性高的代码要比因为手工优化而使代码变得神秘且难以维护更加可贵。事实上,手工优化的代码反而可能会让编译器难以进行额外和更加有

2、效的优化。比起手工优化代码,你更应该考虑关于设计的各个方面,比如使用更快的算法,引入线程级并行机制和利用框架特性(比如move构造函数)。这篇文章是关于VisualC++编译器优化的。为了便于应用,我将会讨论编译器采取的最重要的优化技巧和决策。我的目的不是告诉你如何手工优化代码,而是向你展示为什么你可以信赖编译器来优化你写出的代码。这篇文件绝不是对VisualC++编译器优化工作的全面考察。但是将会给你展示那些你真正想要了解的优化工作和怎样与你的编译器沟通来应用它们。有一些重要的优化是超出所有现有编译器能力的——比如,用高效的算法代替

3、低效的,或者改变数据结构的排列以优化其在内存中的布局。但是这些优化话题超出了本文的范围。定义编译器优化优化工作涉及到的一个方面,是把一行代码转化成同等效果的另一行代码,在这个过程中提升它的一项或多项性能。最重要的两项性能(指标)是代码的执行速度和长度。其他一些特性包括代码执行开销,代码编译所需时间,如果代码需要通过即时编译机制(Just-in-Time(JIT))进行编译,那么JIT所需的编译时间也是指标之一。编译器经常会依据它们所使用的技术优化代码。虽然并不完美,但是比起花时间手工苦苦推敲一个程序,利用编译器提供的特有功能和让编译器

4、来优化代码要高效得多。这里有4种方法让你的编译器更加高效地优化代码:1.书写可读、高效的代码。不要把VisualC++面向对象的特性当作性能的敌人。最新版本的C++可以让这些开销保持到最低甚至消除这些开销。2.使用编译器声明。例如让编译器使用比默认情况更快的函数调用约定。3.使用编译器内置函数(compiler-intrinsicfunctions)。内在函数是其实现由编译器自动提供的特殊函数。编译器对其很熟悉并且会用极其高效的指令序列来代替函数调用,以充分利用目标指令集的优势。当前Microsoft.NET精彩文档实用标准文案Fra

5、mework不支持编译器内置函数,因此其下的语言都不支持。但是VisualC++对这一特性有外在支持。注意,虽然使用内置函数能够提升代码性能,但是会降低可读性和可移植性。4.使用性能分析引导优化(profile-guidedoptimization)。使用这一技术,可以让编译器搜集更多关于代码的运行时行为,并且以此来作为优化依据。本文的目的是通过证明编译器可以在低效但是可读性强的代码上应用优化(应用第一条方法),从而向你展示为什么你可以信任编译器。当然我也会提供一些对性能分析引导优化(profile-guidedoptimizatio

6、n)的简短说明,和提到一些可以微调代码的编译器声明。编译器有许多优化技巧,从像常量折叠这样简单的变换,直到像指令重排(instructionscheduling)这样极其复杂的变换。然而在这篇文章中我只有限地讨论了一些最重要的优化——那些可以显著地提升性能(两位数的百分数来衡量)和减少代码长度的优化:内联函数(functioninlining)、COMDAT优化(COMDAToptimizations)和循环优化。我将会在下一部分讨论前两个话题,然后展示你如何控制VisualC++实现优化。最后会有.NETFramework优化的简略

7、说明。通篇我都将会采用VisualStudio2013来构建代码。链接时代码生成链接时代码生成(LTCG)是一项应用在C/C++代码上的程序全局优化(WPO)技术。C/C++编译器独立地编译每个源文件然后产生出相应的目标文件。这意味着编译器只能在单个源文件上应用优化技术,而无法照顾到整个程序。但是,一些重要的优化却只能浏览全部程序后才能产生。所以你只能在链接时(linktime)应用这些优化,而非编译时(compiletime),因为链接器可以完整地看到程序。当LTGC被打开时(通过指定编译器开关/GL),编译器驱动程序(cl.exe

8、)将只调用编译器前端(c1.dllorc1xx.dll),并把后端调用(c2.dll)推迟到链接时间。产出的目标文件包含通用中间语言(CommonIntermediateLanguage——CIL)代码,而不是依赖机器的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。