您通常将编译器设置为针对最大速度或最小代码大小进行优化吗?或者您手动配置个别优化设置?为什么?
我注意到大多数时候人们倾向于将编译器优化设置保留为默认状态,而使用visual c ++意味着最大速度.我一直认为默认设置更多地与基准测试相关,基准测试往往是完全适合L2缓存的小程序,而不是整体性能最佳,因此我通常将其设置为最小尺寸.
作为一名Gentoo用户,我在整个操作系统上尝试了很多优化,并且在Gentoo论坛上就此进行了无休止的讨论.GCC的一些好标志可以在维基中找到.
简而言之,优化尺寸在有限RAM的旧Pentium3笔记本电脑上效果最佳,但在我的主机台式机上使用Core2Duo,-O2可以获得更好的效果.
如果您对最优化的x86(32位)特定标志感兴趣,还有一个小脚本.
如果您使用gcc并且真的想要优化特定应用程序,请尝试ACOVEA.它运行一组基准测试,然后使用编译标志的所有可能组合重新编译它们.在网站上有一个使用霍夫曼编码的例子(越低越好):
A relative graph of fitnesses: Acovea Best-of-the-Best: ************************************** (2.55366) Acovea Common Options: ******************************************* (2.86788) -O1: ********************************************** (3.0752) -O2: *********************************************** (3.12343) -O3: *********************************************** (3.1277) -O3 -ffast-math: ************************************************** (3.31539) -Os: ************************************************* (3.30573)
(注意它发现-Os在这个Opteron系统上是最慢的.)