diff --git a/library/alloc/src/raw_vec.rs b/library/alloc/src/raw_vec.rs index 522c5bcf5af10..fdf6884794a9e 100644 --- a/library/alloc/src/raw_vec.rs +++ b/library/alloc/src/raw_vec.rs @@ -471,6 +471,7 @@ impl RawVec { // above `RawVec::grow_amortized` for details. (The `A` parameter isn't // significant, because the number of different `A` types seen in practice is // much smaller than the number of `T` types.) +#[inline(never)] fn finish_grow( new_layout: Result, current_memory: Option<(NonNull, Layout)>, diff --git a/library/alloc/src/vec.rs b/library/alloc/src/vec.rs index 2c8bc3d53ef76..62398b8260774 100644 --- a/library/alloc/src/vec.rs +++ b/library/alloc/src/vec.rs @@ -2103,7 +2103,10 @@ where I: TrustedLen, { fn from_iter(iterator: I) -> Self { - let mut vector = Vec::new(); + let mut vector = match iterator.size_hint() { + (_, Some(upper)) => Vec::with_capacity(upper), + _ => Vec::new(), + }; // must delegate to spec_extend() since extend() itself delegates // to spec_from for empty Vecs vector.spec_extend(iterator);