跳至内容

alignof

alignof 表达式返回一个 Int32,表示给定类型的 ABI 对齐字节数。例如

alignof(Int32) # => 4
alignof(Int64) # => 8

struct Foo
  def initialize(@x : Int8, @y : Int16)
  end
end

@[Extern]
@[Packed]
struct Bar
  def initialize(@x : Int8, @y : Int16)
  end
end

alignof(Foo) # => 2
alignof(Bar) # => 1

对于 Reference 类型,对齐方式与指针的对齐方式相同

# On a 64-bit machine
alignof(Pointer(Int32)) # => 8
alignof(String)         # => 8

这是因为 Reference 的内存是在堆上分配的,并且传递的是指向它的指针。要获取类的有效对齐方式,请使用 instance_alignof.

alignof 的参数是一个 类型,通常与 typeof 结合使用

a = 1
alignof(typeof(a)) # => 4