From db89349bdba2fcc03b2f7e2d23f549a9ec5dc0e3 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Mon, 25 Nov 2019 17:53:55 +0100 Subject: [PATCH] Optimize QArrayDataOps::compare for primitive types Change-Id: If726e3ee8a3635dcec2a316f1a829392de298634 Reviewed-by: Simon Hausmann --- src/corelib/tools/qarraydataops.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/corelib/tools/qarraydataops.h b/src/corelib/tools/qarraydataops.h index 8ca181edf1..f3de6b65a9 100644 --- a/src/corelib/tools/qarraydataops.h +++ b/src/corelib/tools/qarraydataops.h @@ -199,6 +199,11 @@ struct QPodArrayOps bool compare(const T *begin1, const T *begin2, size_t n) const { + // only use memcmp for fundamental types or pointers. + // Other types could have padding in the data structure or custom comparison + // operators that would break the comparison using memcmp + if (QArrayDataPointer::pass_parameter_by_value) + return ::memcmp(begin1, begin2, n * sizeof(T)) == 0; const T *end1 = begin1 + n; while (begin1 != end1) { if (*begin1 == *begin2)