Как работает оптимизация проверки границ массива Swift
Я смотрел сессию WWDC 2015 409 - Оптимизация производительности 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
}
И я установил Disable Safety Checks на " Нет" в настройках сборки. Я думаю, что это должно включить проверки границ массива. Кто-нибудь знает почему?
1 ответ
Пример из выступления показывает использование precondition(), но ваш код, похоже, не использует precondition ()