Auto merge of #116846 - krtab:slice_compare_no_memcmp_opt, r=the8472

A more efficient slice comparison implementation for T: !BytewiseEq

(This is a follow up PR on #113654)

This PR changes the implementation for `[T]` slice comparison when `T: !BytewiseEq`. The previous implementation using zip was not optimized properly by the compiler, which didn't leverage the fact that both length were equal. Performance improvements are for example 20% when testing that `[Some(0_u64); 4096].as_slice() == [Some(0_u64); 4096].as_slice()`.
This commit is contained in:
bors 2024-01-09 20:52:34 +00:00
commit 190f4c9611

View file

@ -60,7 +60,17 @@ where
return false;
}
self.iter().zip(other.iter()).all(|(x, y)| x == y)
// Implemented as explicit indexing rather
// than zipped iterators for performance reasons.
// See PR https://github.com/rust-lang/rust/pull/116846
for idx in 0..self.len() {
// bound checks are optimized away
if self[idx] != other[idx] {
return false;
}
}
true
}
}