Cod*_*ich 6 dynamic vtable rust
Rust的trait对象是胖指针,包含2个常规指针:数据和vtable.vtable是一个包含析构函数指针,所有特征方法指针以及最后数据大小和对齐的结构.
大小和对齐字段是什么?
我找不到多少:
这是我到目前为止所发现的:
vtable中的大小和对齐属性将加载到函数中,该librustc_codegen_llvm::glue::size_and_align_of_dst()
函数返回动态大小类型的大小和对齐方式.对于ty::Dynamic(..)
值(编译器描述特征对象的内部方式),从vtable读取大小和对齐:
match t.sty {
ty::Dynamic(..) => {
// load size/align from vtable
let vtable = info.unwrap();
(meth::SIZE.get_usize(bx, vtable), meth::ALIGN.get_usize(bx, vtable))
}
...
}
Run Code Online (Sandbox Code Playgroud)
这个功能反过来用在几个地方:
librustc_codegen_llvm::operand::store_unsized()
用于在堆栈上分配足够的存储空间以存储未装箱的值. librustc_codegen_llvm::intrinsic::codegen_intrinsic_call()
用于实现size_of_val()
内在的librustc_codegen_llvm::intrinsic::codegen_intrinsic_call()
用于实现min_align_of_val()
内在的我没有发现这些值当前被送入Rust释放函数(__rust_dealloc()
)的任何地方,但它们肯定可以在将来用于它.