0

我的问题特别针对 C 中的函数调用。因此,我们可以正常调用函数,也可以通过函数指针调用函数。当您的接口保持不变但具有不同的实现时,将使用函数指针,但即使您有一个具有函数指针的实现也可以提高代码的可读性。

那么,使用静态调用而不是动态函数指针有什么好处。调用显然将在 2 条指令中实现,因为需要获取函数的地址,但返回将花费相同的周期。我只是想了解,处理器和编译器如何优化动态函数指针的静态调用?

谢谢,

4

2 回答 2

3

在大多数情况下,通过指针调用函数会导致编译器无法内联调用(如果编译器确定这样做是有益的)。在某些情况下,编译器甚至能够确定结果在编译时调用函数,从而优化掉函数的整个代码。函数指针也可以防止这种情况发生。

这并不意味着影响将以任何实际重要的方式显而易见。确定这一点的唯一方法是对您的代码进行基准测试/分析。

但是,我看不到函数指针如何能够提供更好的代码可读性。你可能想举一个例子。

于 2012-12-08T00:38:13.793 回答
0

通常,直接调用允许对编译器进行更多优化。

如果真的只有一个实现并且编译器可以看到它[*],它可以优化并执行与直接调用完全相同的操作。但这当然取决于编译器的智能程度以及您使用的优化选项。

[*] 即如果指针值在编译时已知;即如果它是“静态”变量,它的地址永远不会传递到编译单元之外,等等。

于 2012-12-08T00:46:39.183 回答