如何在Swift中使用__builtin_expect?

时间:2019-02-20 03:50:11

标签: ios swift

如何在Swift中使用__builtin_expect(::)

Swift仍然支持此方法吗?

我在Dispatch中找到了以下定义,但我不能称之为它。

public func __builtin_expect(_: Int, _: Int) -> Int

1 个答案:

答案 0 :(得分:1)

Swift标准库中的

Builtin.swift定义

/// Optimizer hint that `x` is expected to be `true`.
@_transparent
@_semantics("fastpath")
public func _fastPath(_ x: Bool) -> Bool {
  return _branchHint(x, expected: true)
}

/// Optimizer hint that `x` is expected to be `false`.
@_transparent
@_semantics("slowpath")
public func _slowPath(_ x: Bool) -> Bool {
  return _branchHint(x, expected: false)
}

,这些内容记录在Standard Library Programmers Manual: Builtins中:

  

_fastPath返回其参数,包装在Builtin.expect中。这通知优化器,大部分时间,分支   将被采用(即then分支是“ hot”)。

     

[...]

     

_slowPath_fastPath相同,只是交换了分支。两者都是_branchHint周围的包装,否则永远不会   直接致电。

     

[...]

     

注意:这些是要重命名和可能的重新设计。他们   混合多个与平均标准不符的概念   图书馆程序员的直觉。

另请参见Swift论坛中的Does guard hint the optimiser that this is the unlikely branch

但是,这些功能未公开公开,并且下划线前划线表示它们仅供库内部使用。当前可以 在您的代码中使用它们

if _fastPath(conditionExpectedToBeTrue) {
    // ...
}

if _slowPath(conditionExpectedToBeFalse) {
    // ...
}

但是不能保证将来可以工作或编译。