动态大小类型
大多数类型在编译时具有固定的大小,且实现了 Sized
trait。大小仅在运行时已知的类型称为 动态大小类型 (DST) 或未确定大小类型 。
切片 和 trait 对象 是两个 DSTs 的例子。这样的类型只能在某些情况下使用:
- 指向 DSTs 的指针类型是有大小的,但大小是指向确定大小类型的指针的两倍。
- 指向切片的指针还会存储切片的元素数量。
- 指向 trait 对象的指针还会存储指向虚表的指针。
- 可以将 DSTs 作为类型参数提供给具有特殊
?Sized
约束的泛型类型参数。当相应的关联类型声明具有?Sized
约束时,它们还可用于关联类型定义。默认情况下,除非使用?Sized
约束,否则任何类型参数或关联类型都具有Sized
约束。 - trait可以为 DSTs 实现。与泛型类型参数有所不同,在 trait 定义中,默认情况下
Self: ?Sized
。 - 结构体可能包含一个 DST 作为最后一个字段;这使得结构体本身变成了 DST 。
译注: 这里的动态大小类型的概念,实际在叙述这样一种状态,比如 A 类型所定义的变量求值后存储占用了 4 个字节,经过计算后再去求值可能改变为 8 个字节,需注意这个变量本身始终固定为 2 个指针的大小,只是对这个指针求值后的间接存储大小可能会发生变化。