gpt4 book ai didi

dynamic - 为什么特征对象 vtables 包含大小和对齐方式?

转载 作者:行者123 更新时间:2023-11-29 07:47:47 29 4
gpt4 key购买 nike

Rust 的特征对象是包含 2 个常规指针的胖指针:指向数据和指向 vtable。 vtable 是一个包含析构函数指针、所有特征方法指针以及最后的数据大小和对齐方式的结构。

大小和对齐字段有什么用?

我找不到太多:

  • Blog post A : 它用于释放内存,但今天没有使用,可能会被 future 更灵活的机制使用(可能是什么?现在还存在吗?)
  • Blog post B :它用于释放类型删除的装箱值,因此他们知道如何释放内存( Box 不存储其分配的位置,大小和对齐方式吗?每个 DST 的每个大小变体都无法获得其自己的 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))
}
...
}

这个函数又用在几个地方:

我没有发现这些值目前被送入 Rust 释放函数(__rust_dealloc())的任何地方,但它们肯定可以在未来用于此目的。

关于dynamic - 为什么特征对象 vtables 包含大小和对齐方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52011247/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com