- 调用间优化
我们之前讨论的内联主要是防止函数调用产生的开销,现在还有一种调用间优化,调用间的优化是代码级的,这是建立在一种更加广泛的上下文关系上。比如一个函数的返回结果需要在另一个函数中使用,如果这两个函数都使用了内联,那么可能编译器进行优化会直接将函数内联,得到一个返回值。比如下面这个例子:
float getfloat()
{
return 90;
}
float cal(float a)
{
return a-1;
}
int reg0=cal(getfloat());
上面的例子如果getfloat和cal两个函数都进行内联的话,编译器就可以直接得出结果89,省去了在运行时调用的时间。并且这种调用间的优化往往会比避免调用更加提高性能。但是,对于这种方式在作用时需要加上易混淆和易变性的假设,这一点是与原代码冲突的。因此如果真的要进行这样的优化,建议了解你当前使用的这款编译器的构造。这样才能避免后续带来的麻烦。
2. 为何不使用内联
内联实际上是直接嵌入代码,如果我们内联一段很长的函数,并且调用多次,虽然我们在内联时的确提高了性能;但是却因为多次调用大大增加了代码量,代码量的膨胀又带来了性能的降低,那如果降低的还比性能提升的多的话,这样的交换也是得不偿失。