您如何知道编译器会内联或不会内联什么?
有时我被告知一些小的优化是没有意义的,因为编译器会内联某些调用或计算,其他时候似乎推荐类似的优化。
让我们知道何时需要或不需要优化这些东西的规则是什么?
最佳答案
查看某个内容是否内联的唯一可靠方法是查看程序集。
是否内联某些内容完全取决于编译器 - 因为编译器最终决定是否内联某些内容。
撇开过早的优化:如果它真的很重要(或者如果您只是好奇),您可以使用特定于编译器的编译指示强制内联/不内联函数,然后适本地分析以查看是否你可以做出比编译器更好的决定。
尽管如此,在某些情况下您可以确定无法内联函数:
- 在编译时无法确定类型的虚拟调用函数。
- 除非可以静态确定最大深度,否则递归函数永远无法完全内联。
关于c++ - 编译器内联什么调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8271343/