offsetof
offsetof
offsetof 표현식은 클래스나 구조체의 인스턴스에서 어떤 필드의 바이트 오프셋을 돌려줘요. C API가 Crystal 타입의 데이터 레이아웃에 직접 인터페이스해야 할 때 필요한 저수준 원시(primitive) 기능이에요.
offsetof 표현식에는 두 가지 형태가 있어요. 첫 번째 형태는 첫 인자로 어떤 타입이든, 두 번째 인자로 @가 붙은 인스턴스 변수 이름을 받고, 주어진 타입의 인스턴스를 기준으로 그 인스턴스 변수의 바이트 오프셋을 돌려줍니다.
struct Foo
@x = 0_i64
@y = 34_i8
@z = 42_u16
end
offsetof(Foo, @x) # => 0
offsetof(Foo, @y) # => 8
offsetof(Foo, @z) # => 10
두 번째 형태는 첫 인자로 어떤 Tuple 인스턴스 타입이든, 두 번째 인자로 정수 리터럴 인덱스를 받고, 주어진 타입의 인스턴스를 기준으로 그 튜플 요소의 바이트 오프셋을 돌려줘요.
offsetof(Tuple(Int64, Int8, UInt16), 0) # => 0
offsetof(Tuple(Int64, Int8, UInt16), 1) # => 8
offsetof(Tuple(Int64, Int8, UInt16), 2) # => 10
더 알아보기 (Learn more)
- Crystal 공식 문서 - offsetof
- alignof — 타입의 ABI 정렬 얻기