Swift数组边界检查优化的工作原理

时间:2017-11-06 18:59:37

标签: arrays swift bounds

我在看WWDC 2015 session 409 - Optimizing Swift Performance 。它提到Swift确保数组访问发生在边界内。而Swift可以将检查提升出来。因此O(n)检查变为O(1)。

谈话的例子如下:

//Before Optimization
for i in 0..<n {
    precondition (i < length)
    A[i] ^= 13
}

//After Optimization
precondition (i < length)
for i in 0..<n {
    A[i] ^= 13
}

根据我的理解,编译器应该在编译代码时执行所谓的数组边界检查。但是,当我使用以下代码进行测试时,我没有看到编译器的警告。相反,它在运行时崩溃了。

 var a = Array(1...5)

 for i in 0..<6 {
     a[i] ^= 13
 }

我确实在构建设置下将禁用安全检查设置为。我认为这应该打开阵列边界检查。谁知道为什么?

1 个答案:

答案 0 :(得分:0)

谈话中的例子显示了precondition()的使用,但你的代码似乎没有使用precondition()