
기존의 배열은 동적 배열로 배열은 힙에 저장된 값들을 가리킨다.

기존에 시스템이 임의로 배열에 설정한 용량에 도달하면 동적으로 새 메모리를 할당하고 기존 요소들을 복사해야 하는 일련의 과정이 발생하여 성능 저하가 발생한다.
기존
let array: Array<Int> = []로 동적 배열만 설정할 수 있던 문제를 해결

InlineArray 생성자를 통한 정적 배열 생성

정적 배열이기 때문에 heap 할당이 필요없어졌으므로 stack에 저장됨.

복사된 배열 또한 stack에 저장

비소유(non-owning) 뷰로, Array, Data 등 소유한 컨테이너의 메모리를 벗어나지 않는 범위에서 참조
func getPointerToBytes() -> UnsafePointer<UInt8> {
let array: [UInt8] = Array(repeating: 0, count: 128)
// DANGER: The next line escapes a pointer
let pointer = array.withUnsafeBufferPointer { $0.baseAddress! }
// DANGER: The next line returns the escaped pointer
return pointer
}
returnreturn 되어 해당 주소에 잔여 참조 발생 (dangling pointer) // Safe usage of a span
@available(macOS 16.0, *)
func processUsingSpan(_ array: [Int]) -> Int {
let intSpan = array.span
var result = 0
for i in 0..<intSpan.count {
result += calculate(using: intSpan, at: i)
}
return result
}
Array, ArraySlice, InlineArray 타입 등 여러 타입 내에 span 타입 지원let intSpan = array.span 으로 복사 없이 메모리 참조Span이 접근 할 수 있는 메모리는 메서드 탈출 전까지 수명 보장Nonescapable로 컴파일러가 탈출을 방지 (경고)참고
https://developer.apple.com/videos/play/wwdc2025/245/?time=1571
https://developer.apple.com/videos/play/wwdc2025/312/?time=1152
https://developer.apple.com/documentation/swift/span?changes=la