Most types have a fixed size that is known at compile time and implement the
Sized. A type with a size that is known only at run-time is
called a dynamically sized type (DST) or, informally, an unsized type.
Slices and trait objects are two examples of DSTs. Such types can only be used in certain cases:
- Pointer types to DSTs are
sized but have twice the size of pointers to sized types
- Pointers to slices also store the number of elements of the slice.
- Pointers to trait objects also store a pointer to a vtable.
- DSTs can be provided as
type arguments when a bound of
?Sized. By default any type parameter has a
- Traits may be implemented for DSTs. Unlike type parameters
Self: ?Sizedby default in trait definitions.
- Structs may contain a DST as the last field, this makes the struct itself a DST.