【问题标题】:How global functions on swift are compiled/dispatched?swift 上的全局函数如何编译/调度?
【发布时间】:2018-02-21 06:06:43
【问题描述】:

我看到了与该主题相关的其他问题,但其中任何一个都解释了编译器如何处理这些函数以及它们是如何分派的,如果它们的行为类似于 inline 函数还是什么?

基本上我想知道使用全局函数和类/静态函数之间的性能差异。

注意:我不是在问这是否是一个好习惯,只是哪个选项具有更好的性能。

【问题讨论】:

  • 我没有这方面的来源,但它们是静态分派的。 Vtable/动态调度没有意义,因为全局函数没有多个需要由运行时选择的实现。内联通常会完成,但不能保证。
  • @Alexander 你说得对,动态调度没有意义。所以我们可以假设它们将被静态调度。所以基本上性能将与类/静态函数相同,只是名称间距不同。
  • 作为静态函数,是的。但与类方法不同,类方法需要在非最终类中动态调度。
  • 对不起,我的意思是static

标签: swift compiler-construction global dispatch


【解决方案1】:

根据this link,默认是有时内联它们。编译器已经非常擅长确定何时可以优化某些内容,但如果您想阻止或强制内联,您可以使用 @inline 属性来实现。

我不确定这对性能有何影响,但如果我不得不猜测,我会说 global 函数可能比 class 函数稍快,除非该类被标记为 final 或函数标记为static

【讨论】:

  • 正如@Alexander 在评论中解释的那样,它们可能是静态调度的(因为动态调度没有意义),因此性能可能相同,或者如您所说,稍微快一些。跨度>
  • @rgkobashi 你是对的,我的意思是说它比 class 函数更快,它可以被覆盖。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
  • 2021-01-01
  • 1970-01-01
  • 2018-01-22
相关资源
最近更新 更多