在C中调用函数

时间:2012-12-08 00:35:07

标签: c x86 x86-64 compiler-optimization

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

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

谢谢,

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

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

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

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