about summary refs log tree commit diff
path: root/library/alloc/src/vec/mod.rs
diff options
context:
space:
mode:
authorIvan Tham <pickfire@riseup.net>2020-12-05 10:21:54 +0800
committerIvan Tham <pickfire@riseup.net>2021-01-20 23:41:56 +0800
commit9f338e18afd865e776d8f8cd7c763572a9a03ddf (patch)
treee06ac47580616726d54288b9c587b22d7e1dff67 /library/alloc/src/vec/mod.rs
parent9e42d14927924036884734bd094747dd76b8b5f3 (diff)
downloadrust-9f338e18afd865e776d8f8cd7c763572a9a03ddf.tar.gz
rust-9f338e18afd865e776d8f8cd7c763572a9a03ddf.zip
Add more details explaning the Vec visualization
Suggested by oli-obk
Diffstat (limited to 'library/alloc/src/vec/mod.rs')
-rw-r--r--library/alloc/src/vec/mod.rs42
1 files changed, 22 insertions, 20 deletions
diff --git a/library/alloc/src/vec/mod.rs b/library/alloc/src/vec/mod.rs
index 88cdf588e35..e09c3e5d23b 100644
--- a/library/alloc/src/vec/mod.rs
+++ b/library/alloc/src/vec/mod.rs
@@ -253,26 +253,6 @@ mod spec_extend;
 /// can be slow. For this reason, it is recommended to use [`Vec::with_capacity`]
 /// whenever possible to specify how big the vector is expected to get.
 ///
-/// A vector containing the elements `'a'` and `'b'` with capacity 4 can be
-/// visualized as:
-///
-/// ```text
-/// Stack       ptr      len  capacity
-/// /Heap  +--------+--------+--------+
-///        | 0x0123 |      2 |      4 |
-///        +--------+--------+--------+
-///             |
-///             v
-/// Heap   +--------+--------+--------+--------+
-///        |    'a' |    'b' | uninit | uninit |
-///        +--------+--------+--------+--------+
-/// ```
-///
-/// - **uninit** represents memory that is not initialized, see [`MaybeUninit`].
-/// - Note: the ABI is not stable and `Vec` makes no guarantees about its memory 
-///   layout (including the order of fields). See [the section about 
-///   guarantees](#guarantees).
-///
 /// # Guarantees
 ///
 /// Due to its incredibly fundamental nature, `Vec` makes a lot of guarantees
@@ -305,6 +285,28 @@ mod spec_extend;
 /// you would see if you coerced it to a slice), followed by [`capacity`]` -
 /// `[`len`] logically uninitialized, contiguous elements.
 ///
+/// A vector containing the elements `'a'` and `'b'` with capacity 4 can be
+/// visualized as below. The top part is the `Vec` struct, it contains a
+/// pointer to the head of the allocation in the heap, length and capacity.
+/// The bottom part is the allocation on the heap, a contiguous memory block.
+///
+/// ```text
+///             ptr      len  capacity
+///        +--------+--------+--------+
+///        | 0x0123 |      2 |      4 |
+///        +--------+--------+--------+
+///             |
+///             v
+/// Heap   +--------+--------+--------+--------+
+///        |    'a' |    'b' | uninit | uninit |
+///        +--------+--------+--------+--------+
+/// ```
+///
+/// - **uninit** represents memory that is not initialized, see [`MaybeUninit`].
+/// - Note: the ABI is not stable and `Vec` makes no guarantees about its memory
+///   layout (including the order of fields). See [the section about
+///   guarantees](#guarantees).
+///
 /// `Vec` will never perform a "small optimization" where elements are actually
 /// stored on the stack for two reasons:
 ///