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