如何在Swift中使用__builtin_expect(::)
?
Swift仍然支持此方法吗?
我在Dispatch中找到了以下定义,但我不能称之为它。
public func __builtin_expect(_: Int, _: Int) -> Int
答案 0 :(得分:1)
/// 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) {
// ...
}
但是不能保证将来可以工作或编译。