【问题标题】:Performance of external versus static function call外部与静态函数调用的性能
【发布时间】:2013-06-03 18:31:19
【问题描述】:

调用extern 函数与调用static 函数之间的性能通常存在差异吗?如果是这样,是什么导致了这种差异 - 两个调用不是通过早期绑定以相同的方式映射(即映射到特定的机器地址)吗?

【问题讨论】:

  • 有一点是肯定的:static 函数可能被内联,而在不同翻译单元中定义的函数则不能(至少在不常见的 LTO 的情况下不能)。此外,如果 extern 函数位于动态链接库中,则加载库可能会产生成本(但不确定运行时性能,它可能因系统和 ABI 而异)。
  • 编译器内联静态函数要“容易”得多。内联在另一个翻译模块中定义的外部函数需要整个程序优化(基本上是链接时优化)。

标签: c performance static c99 extern


【解决方案1】:

这是一个实现细节,完全取决于编译器/链接器。在 Linux 上,在静态链接库中调用静态函数或外部函数本质上是相同的,而在共享库中调用函数会增加一层间接性,因此速度会慢一些。

此外,编译器有更多关于静态函数的信息,因此可以进行更多优化,包括潜在的内联。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 2013-08-11
    相关资源
    最近更新 更多