instance_alignof
instance_alignof
instance_alignof 표현식은 주어진 클래스의 인스턴스 정렬(alignment)을 Int32로 반환해요.
할당된 객체에 대한 참조(포인터)의 정렬을 반환하는 alignof와 달리, instance_alignof는 할당된 객체 자체의 정렬을 반환해요.
예를 들어 볼게요.
class Foo
end
class Bar
def initialize(@x : Int64)
end
end
instance_alignof(Foo) # => 4
instance_alignof(Bar) # => 8
Foo에는 인스턴스 변수가 하나도 없는데도, 컴파일러는 항상 객체의 타입 id를 위한 Int32 필드를 하나 더 포함해요. 그래서 인스턴스 정렬이 1이 아니라 4가 되는 거예요.
출처: Crystal 공식 문서
본문
instance_alignof는 클래스 자체의 인스턴스 정렬을 돌려준다는 점에서alignof(참조/포인터 정렬)와 달라요.Foo처럼 인스턴스 변수가 없어도 타입 id 필드 때문에 정렬이 4가 되는 점을 기억하세요.
더 알아보기
- alignof: 할당된 객체의 참조(포인터) 정렬
- sizeof / instance_sizeof: 크기를 다루는 관련 표현식