现代优化编译器如何确定何时优化?

7 compiler-construction optimization gcc compiler-optimization

现代优化编译器如何确定何时应用某些优化,例如循环展开和代码内联?

由于这两者都会影响缓存,使用少于X行的天真内联函数或任何其他简单的启发式,可能会产生性能更差的代码.那么,现代编译器如何处理这个呢?

我很难找到相关的信息(特别是那些相当容易理解的信息......),关于我能找到的最好的是维基百科文章.任何细节,书籍/文章/论文链接,非常感谢!

编辑:由于答案主要是关于我提到的两个优化(内联和循环展开),我只是想澄清我对所有和任何编译器优化感兴趣,而不仅仅是那两个.我也对可以在提前编译期间执行的优化更感兴趣,尽管JIT优化也是有意义的(尽管程度稍低).

谢谢!

Chr*_*ian 4

无论如何,通常是那种天真,并希望它是一种改进.

这就是为什么即时编译是如此成功的策略.收集统计数据然后针对常见情况进行优化.

参考文献: