编译器如何决定是否值得使我的函数内联?

Ban*_*ant 7 c++ compiler-construction

我想知道是否有人知道C++编译器通常用来决定是否在编译时内联函数的逻辑(假设已经请求了内联).

这类事物是公共知识吗?

Mat*_* M. 6

在另一个问题上给出了更全面的答案.

基本上编译器有基于成本分析的heurstics,引用自己(这是否意味着我会老死?)

如果你考虑内联及其后果,你会意识到:

  • 你避免函数调用(所有寄存器保存/帧调整)
  • 你向优化器暴露了更多的上下文(死存储,死代码,常见的子表达式elimintation ......)
  • 以复制代码为代价(膨胀指令缓存和可执行文件大小等)

当然,还有部分内联,其中只有部分功能是内联的,通常是一个领先的if后卫foo(T* t) { if (!t) { return; } <many many things> }.