As our last subject in this chapter, let's consider Vec<T>. The Rust vector is a growable array, that is, an area of contiguous, homogeneous storage that can be grown through reallocation as the need arises, or it cane be shrunk. The advantage compared to array is in not needing to know ahead of time exactly what size of storage you need, plus all the benefits of a slicable structure and additional functions in the type API. Vec<T> is an extremely common Rust structure, so much so that its actual name is std::vec::Vec<T> but Rust imports the type by default. Rust programs are full of vectors and it stands to reason we'd do well to understand how it interacts with the memory it holds.
Vec<T> is defined in src/liballoc/vec.rs and is defined ...