ABI: 타입 레이아웃¶
Swift 타입의 메모리 레이아웃 알고리즘. 원본: swift/docs/ABI/TypeLayout.rst
Struct/Tuple 레이아웃 ("Universal" 알고리즘)¶
- size=0, alignment=1로 시작
- 각 필드를 선언 순서대로:
- size를 필드 alignment로 올림
- 필드 offset = 현재 size
- size += 필드 size
- alignment = max(alignment, 필드 alignment)
- stride = size를 alignment로 올림
C와의 차이¶
- size와 stride가 구분됨: 외부 struct가 내부 struct의 tail padding에 필드 배치 가능
- zero-size struct 허용: 집합 내 저장 공간 불필요
- LLVM packed struct로 직접 레이아웃 제어
Class 레이아웃¶
- ObjC 런타임에 의존 (Apple 플랫폼)
- root class는 안정적이어야 함 (metaclass 계층 보존)
- 암시적 root:
SwiftObject(ObjC 클래스)
Enum 레이아웃¶
- 단일 payload enum: payload + extra inhabitants + tag bytes
- 다중 payload enum: payload union + tag
- no-payload enum: C enum과 유사
관련 페이지: Enums / EnumStyle proposals → 타입 시스템 / API 표면 / 레이아웃 교차 읽기, Option Sets proposal → importer / layout / value-type API 교차 읽기, ABI: 타입 메타데이터, ABI: 심볼 맹글링, ABI: 호출 규약, ABI 안정성, Swift 런타임