yoi*_*cis 22 c c++ optimization gcc g++
我可以获得一系列常见的C++优化实践吗?
我的意思是优化是你必须修改源代码才能更快地运行程序,而不是改变编译器设置.
pli*_*nth 24
我将回应别人所说的话:一个更好的算法将在性能提升方面取胜.
也就是说,我从事图像处理工作,作为一个问题领域可能会更加棘手.例如,很多年前我有一大堆代码看起来像这样:
void FlipBuffer(unsigned char *start, unsigned char *end)
{
unsigned char temp;
while (start <= end) {
temp = _bitRev[*start];
*start++ = _bitRev[*end];
*end-- = temp;
}
}
Run Code Online (Sandbox Code Playgroud)
它将1位帧缓冲器旋转180度._bitRev是256字节的反转位表.这段代码就像你能得到的一样严密.它采用8MHz 68K激光打印机控制器,大约需要2.5秒才能完成一张合法大小的纸张.为了省去细节,客户无法忍受2.5秒.解决方案是与此相同的算法.不同之处在于
所以5x:没有算法改变.
关键是您还需要了解您的问题域以及瓶颈意味着什么.在图像处理中,算法仍然是王道,但如果你的循环正在做额外的工作,那么将这项工作乘以数百万,这就是你支付的价格.
Ses*_*esh 17
编写更好程序的两种方法:
充分利用语言
描述你的申请
人们可以做的语言没有太多优化 - 它仅限于使用语言结构(从#1学习).主要好处来自上面的#2.
bay*_*yda 12
不要忘记一些事情:
- "我们应该忘记小的效率,大约97%的时间说:过早的优化是所有邪恶的根源." (c)Donald Knuth
- 如果我们优化算法而不是代码,我们可以得到更多.
- 我们将仅优化现有代码的慢速部分,这些部分将由分析器或其他特殊工具检测到.
Agner Fog在分析几个关于C++结构的编译器的输出方面做得很好.你会在这里找到他的作品:http://www.agner.org/optimize/.
英特尔也提供了一个很棒的文档 - "英特尔®64和IA-32架构优化参考手册",您可以在http://www.intel.com/products/processor/manuals/index.htm找到它.虽然它主要针对IA-32架构,但它包含可应用于大多数平台的一般建议.显然,它和Agner Fog的指南确实相交了一点.
正如其他答案中所提到的,在分析和算法选择之后,微优化显然是您想要使程序更快的最后一步.