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: 크기를 다루는 관련 표현식