From a1a04e08428f2e2e26fd88c40141f7465f708c4e Mon Sep 17 00:00:00 2001 From: The8472 Date: Wed, 2 Dec 2020 22:15:53 +0100 Subject: [PATCH] add transmute-via-iterators bench --- library/alloc/benches/vec.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/library/alloc/benches/vec.rs b/library/alloc/benches/vec.rs index 73eb353f6e7..7a098219ce4 100644 --- a/library/alloc/benches/vec.rs +++ b/library/alloc/benches/vec.rs @@ -548,6 +548,22 @@ fn bench_in_place_zip_iter_mut(b: &mut Bencher) { black_box(data); } +pub fn vec_cast(input: Vec) -> Vec { + input.into_iter().map(|e| unsafe { std::mem::transmute_copy(&e) }).collect() +} + +#[bench] +fn bench_transmute(b: &mut Bencher) { + let mut vec = vec![10u32; 100]; + b.bytes = 800; // 2 casts x 4 bytes x 100 + b.iter(|| { + let v = std::mem::take(&mut vec); + let v = black_box(vec_cast::(v)); + let v = black_box(vec_cast::(v)); + vec = v; + }); +} + #[derive(Clone)] struct Droppable(usize);