动态sized类型(DST)
Contents
Dynamically-Sized Types (DSTs)
document 绝大多数情况下,Rust 编译器认为类型必须具有静态已知的Size大小,但是并不总是这样。 有一类特殊的类型:动态sized类型(DST),DST类型不是 Rust 一等公民类型,必须通过指针实例化。
动态sized类型:仅在运行时知道的sized大小的类型、简称DST (dynamically sized type); 动态sized类型有: str、Slices 、 trait objects、最后一个字段是动态sized类型的结构体; 指向动态sized类型的指针是胖指针(占用的内存大小是和常规指针的两倍);
trait 对象是实现指定trait的类型,trait 对象必须通过胖指针标记,trait 对象的胖指针包含一个指向trait对象的常规指针和一个 vtable Pointer ,vtable Pointer 代表trait 对象的运行时sized; 切片( slice ) 是数据视图,比如是某个数组或Vec中的部分或全部数据的视图。切片( slice ) 同样需要胖指针,切片( slice )的胖指针包含切片指针(slice pointer)和辅助信息指针(视图中数据元素个数);
作者:一起虚度时光 链接:https://juejin.im/post/6844904169556574216 来源:掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
关于 trait object
深入浅出rust p264 静态分配与动态分配 “trait object”是Rust进行动态分配(dynamic dispatch)的方法。 动态分配是指编译器在编译时无法告诉您要调用的方法。在动态调度的情况下,编译器发出的代码将在运行时确定要调用的方法
https://joshleeb.com/blog/rust-traits-trait-objects/ 当代码涉及多态性时,需要一种机制来确定实际运行哪个特定版本。这就是所谓的“dispatch”。分派有两种主要形式:静态分派和动态分派。尽管Rust支持静态分配,但它也通过称为“trait object”的机制支持动态分配。
2021.5.28
Author sorvik
LastMod 2020-09-21