From fd7b0408234872f00da61337cd59b59e6f5e32c8 Mon Sep 17 00:00:00 2001 From: Matthew Parkinson Date: Fri, 19 Mar 2021 15:25:13 +0000 Subject: [PATCH] Align wrapper for array. --- src/ds/helpers.h | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/ds/helpers.h b/src/ds/helpers.h index a815728..6994e82 100644 --- a/src/ds/helpers.h +++ b/src/ds/helpers.h @@ -73,18 +73,26 @@ namespace snmalloc template class ModArray { + /** + * Align the elements, so that access is cheaper. + */ + struct alignas(bits::next_pow2_const(sizeof(T))) TWrap + { + T v; + }; + static constexpr size_t rlength = bits::next_pow2_const(length); - T array[rlength]; + TWrap array[rlength]; public: constexpr const T& operator[](const size_t i) const { - return array[i & (rlength - 1)]; + return array[i & (rlength - 1)].v; } constexpr T& operator[](const size_t i) { - return array[i & (rlength - 1)]; + return array[i & (rlength - 1)].v; } };