From c9b023be239a8e2656d08735481ccce609df3b77 Mon Sep 17 00:00:00 2001 From: Nathaniel Filardo Date: Fri, 31 Jul 2020 23:22:37 +0100 Subject: [PATCH] FlatPagemap: Stop allocating way more space than needed FlatPagemap computes the size of its internal `top` array as if it needed an entry per byte, rather than an entry per instance of its template type T. In practice. T has always been uint8_t so far, so this hasn't mattered, but when we use a larger type, suddenly FlatPagemap balloons to much larger than needed. --- src/mem/pagemap.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/mem/pagemap.h b/src/mem/pagemap.h index bc75fd3..0774c68 100644 --- a/src/mem/pagemap.h +++ b/src/mem/pagemap.h @@ -326,9 +326,7 @@ namespace snmalloc private: static constexpr size_t COVERED_BITS = bits::ADDRESS_BITS - GRANULARITY_BITS; - static constexpr size_t CONTENT_BITS = - bits::next_pow2_bits_const(sizeof(T)); - static constexpr size_t ENTRIES = 1ULL << (COVERED_BITS + CONTENT_BITS); + static constexpr size_t ENTRIES = 1ULL << COVERED_BITS; static constexpr size_t SHIFT = GRANULARITY_BITS; std::atomic top[ENTRIES];