现代优化编译器如何确定何时应用某些优化,例如循环展开和代码内联?
由于两者都会影响缓存,因此简单的启发式算法,如内联少于X行的函数,可能会生成性能更差的代码。那么,现代编译器如何处理这个问题?
我很难找到相关信息(特别是易于理解的信息...),最好能找到的是wikipedia article。非常感谢提供任何细节、书籍/文章/论文链接!
编辑:由于答案主要涉及我提到的两种优化(内联和循环展开),我想澄清一下,我对所有编译器优化都感兴趣,不仅限于这两个。我更关心在静态编译期间可以执行的优化,尽管JIT优化也有一定的兴趣(但略微较少)。
谢谢!
由于两者都会影响缓存,因此简单的启发式算法,如内联少于X行的函数,可能会生成性能更差的代码。那么,现代编译器如何处理这个问题?
我很难找到相关信息(特别是易于理解的信息...),最好能找到的是wikipedia article。非常感谢提供任何细节、书籍/文章/论文链接!
编辑:由于答案主要涉及我提到的两种优化(内联和循环展开),我想澄清一下,我对所有编译器优化都感兴趣,不仅限于这两个。我更关心在静态编译期间可以执行的优化,尽管JIT优化也有一定的兴趣(但略微较少)。
谢谢!