콘텐츠로 이동

ABI: 타입 메타데이터

모든 Swift 타입의 런타임 메타데이터 레코드 레이아웃. 원본: swift/docs/ABI/TypeMetadata.rst

개요

Swift 런타임은 프로그램에서 사용되는 모든 타입에 대해 메타데이터 레코드를 유지한다: - 비제네릭 nominal 타입: 컴파일러가 정적 생성 - 제네릭 인스턴스, 튜플, 함수 등: 런타임이 lazy 생성 - 두 메타데이터 포인터가 같으면 같은 타입

공통 레이아웃

모든 메타데이터는 공통 헤더를 공유:

오프셋 필드 설명
-1 Value Witness Table 값 시맨틱(allocate, copy, destroy) 연산 vtable
0 kind 메타데이터 종류 식별

Kind 값

타입
0 Class (ObjC 상호운용 시 isa 포인터)
1 Struct
2 Enum
3 Optional
8 Opaque (Builtin 프리미티브)
9 Tuple
10 Function
12 Protocol (합성, Any 포함)
13 Metatype
>2047 ObjC 상호운용 클래스 (isa 포인터)

타입별 추가 레이아웃

  • Struct: nominal type descriptor + generic argument vector + field offsets
  • Class: superclass pointer + vtable entries
  • Enum: nominal type descriptor + generic arguments + payload 정보
  • Tuple: 요소 수 + 레이블 + 요소 타입 포인터

관련 페이지: abi-type-layout, abi-mangling, abi-calling-convention, abi-stability, runtime, dynamic-casting, glossary-compiler