当前位置:  开发笔记 > 编程语言 > 正文

常见的C++优化技术列表

如何解决《常见的C++优化技术列表》经验,为你挑选了5个好方法。

我可以获得一系列常见的C++优化实践吗?

我的意思是优化是你必须修改源代码才能更快地运行程序,而不是改变编译器设置.



1> plinth..:

我将回应别人所说的话:一个更好的算法将在性能提升方面取胜.

也就是说,我从事图像处理工作,作为一个问题领域可能会更加棘手.例如,很多年前我有一大堆代码看起来像这样:

void FlipBuffer(unsigned char *start, unsigned char *end)
{
    unsigned char temp;

    while (start <= end) {
        temp = _bitRev[*start];
        *start++ = _bitRev[*end];
        *end-- = temp;
    }
 }

它将1位帧缓冲器旋转180度._bitRev是256字节的反转位表.这段代码就像你能得到的一样严密.它采用8MHz 68K激光打印机控制器,大约需要2.5秒才能完成一张合法大小的纸张.为了省去细节,客户无法忍受2.5秒.解决方案是与此相同的算法.不同之处在于

    我用128K表操作单词而不是字节(68K在单词上更快乐)

    我使用Duff的设备来展开循环,就像在一个短分支中一样

    我进行了优化以跳过空白单词

    我最后在汇编中重写它以利用sobgtr指令(减去一个并在更大的分支上)并在正确的位置具有"自由"后增量和预减量.

所以5x:没有算法改变.

关键是您还需要了解您的问题域以及瓶颈意味着什么.在图像处理中,算法仍然是王道,但如果你的循环正在做额外的工作,那么将这项工作乘以数百万,这就是你支付的价格.



2> Sesh..:

编写更好程序的两种方法:

充分利用语言

    代码由Steve McConnell完成

    有效的C++

    特殊的C++

描述你的申请

    确定哪些代码区域占用了多少时间

    看看你是否可以使用更好的数据结构/算法来加快速度

人们可以做的语言没有太多优化 - 它仅限于使用语言结构(从#1学习).主要好处来自上面的#2.


我有Code Complete,至少是1993年的版本,虽然它充满了强大的程序员建议,但我不会说它"充分利用语言"(C++).这是相当语言中立的.

3> bayda..:

不要忘记一些事情:
- "我们应该忘记小的效率,大约97%的时间说:过早的优化是所有邪恶的根源." (c)Donald Knuth
- 如果我们优化算法而不是代码,我们可以得到更多.
- 我们将仅优化现有代码的慢速部分,这些部分将由分析器或其他特殊工具检测到.



4> Raphaël Sain..:

Agner Fog在分析几个关于C++结构的编译器的输出方面做得很好.你会在这里找到他的作品:http://www.agner.org/optimize/.

英特尔也提供了一个很棒的文档 - "英特尔®64和IA-32架构优化参考手册",您可以在http://www.intel.com/products/processor/manuals/index.htm找到它.虽然它主要针对IA-32架构,但它包含可应用于大多数平台的一般建议.显然,它和Agner Fog的指南确实相交了一点.

正如其他答案中所提到的,在分析和算法选择之后,微优化显然是您想要使程序更快的最后一步.



5> sivabudh..:

您可能对此感兴趣:优化C++ Wikibook

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有