现代 CPU 具有广泛的流水线,也就是说,它们在实际执行指令之前很久就加载了必要的指令和数据。
有时,加载到管道中的数据会失效,必须清除管道并重新加载新数据。重新填充管道所需的时间可能相当长,并导致性能下降。
如果我在 C 中调用函数指针,管道是否足够智能,可以意识到管道中的指针是函数指针,并且它应该跟随该指针以执行下一条指令?还是有一个函数指针会导致管道清理并降低性能?
我在 C 中工作,但我想这在 C++ 中更为重要,因为许多函数调用都是通过 v-tables 进行的。
编辑 @JensGustedt 写道:
要真正影响函数调用的性能,您调用的函数必须非常简短。如果您通过测量代码观察到这一点,您肯定应该重新审视您的设计以允许内联该调用
不幸的是,这可能是我落入的陷阱。
出于性能原因,我编写了小而快的目标函数。
但是它被函数指针引用,因此可以很容易地用其他函数替换它(只需让指针引用不同的函数!)。因为我通过函数指针引用它,所以我认为它不能被内联。
所以,我有一个非常简短的非内联函数。