diff --git a/src/backend/backend.h b/src/backend/backend.h index 15afa97..49bbcc4 100644 --- a/src/backend/backend.h +++ b/src/backend/backend.h @@ -58,12 +58,15 @@ namespace snmalloc SNMALLOC_REQUIRE_CONSTINIT static inline AddressSpaceManager address_space; - SNMALLOC_REQUIRE_CONSTINIT - static inline FlatPagemap - pagemap; - - struct Pagemap + class Pagemap { + friend class BackendAllocator; + + SNMALLOC_REQUIRE_CONSTINIT + static inline FlatPagemap + concretePagemap; + + public: /** * Get the metadata associated with a chunk. * @@ -73,7 +76,7 @@ namespace snmalloc template SNMALLOC_FAST_PATH static const MetaEntry& get_metaentry(address_t p) { - return pagemap.template get(p); + return concretePagemap.template get(p); } /** @@ -84,13 +87,13 @@ namespace snmalloc { for (address_t a = p; a < p + size; a += MIN_CHUNK_SIZE) { - pagemap.set(a, t); + concretePagemap.set(a, t); } } static void register_range(address_t p, size_t sz) { - pagemap.register_range(p, sz); + concretePagemap.register_range(p, sz); } }; @@ -100,7 +103,7 @@ namespace snmalloc { static_assert(fixed_range_ == fixed_range, "Don't set SFINAE parameter!"); - pagemap.init(); + Pagemap::concretePagemap.init(); } template @@ -108,7 +111,8 @@ namespace snmalloc { static_assert(fixed_range_ == fixed_range, "Don't set SFINAE parameter!"); - auto [heap_base, heap_length] = pagemap.init(base, length); + auto [heap_base, heap_length] = + Pagemap::concretePagemap.init(base, length); address_space.template add_range( CapPtr(heap_base), heap_length); }