【问题标题】:calling functions in C [closed]在C中调用函数[关闭]
【发布时间】:2012-11-26 05:28:58
【问题描述】:

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

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

谢谢,

【问题讨论】:

  • 您说使用函数指针比普通函数调用更具可读性,您介意详细说明您为什么这么认为吗?
  • "...即使您有一个具有函数指针的实现也可以提高代码的可读性..."。我不明白怎么做。这到底是什么意思?

标签: c x86 x86-64 compiler-optimization


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    一般来说,直接调用可以对编译器进行更多优化。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-14
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多