C++内联函数和特定于上下文的优化

Des*_*tor 4 c++ optimization inline-functions compiler-optimization

我在Scott Meyers的Effective C++书中读过:

内联函数时,可以使编译器对函数体执行特定于上下文的优化.对于正常的函数调用,这种优化是不可能的.

现在的问题是:什么是特定于上下文的优化以及为什么需要它?

Rei*_*ica 6

我不认为"特定于上下文的优化"是一个定义的术语,但我认为它基本上意味着编译器可以分析调用站点及其周围的代码并使用此信息来优化函数.

这是一个例子.当然,它是人为的,但它应该证明这个想法:

功能:

int foo(int i)
{
  if (i < 0) throw std::invalid_argument("");
  return -i;
}
Run Code Online (Sandbox Code Playgroud)

通话网站:

int bar()
{
  int i = 5;
  return foo(i);
}
Run Code Online (Sandbox Code Playgroud)

如果foo单独编译,则必须包含比较和抛出异常的代码.如果内联bar,编译器会看到以下代码:

int bar()
{
  int i = 5;
  if (i < 0) throw std::invalid_argument("");
  return -i;
}
Run Code Online (Sandbox Code Playgroud)

任何理智的优化者都会对此进行评估

int bar()
{
  return -5;
}
Run Code Online (Sandbox Code Playgroud)