From a1f17e6060437ea44710ac9f185e2237985fec00 Mon Sep 17 00:00:00 2001 From: Nathaniel Filardo Date: Wed, 31 Mar 2021 19:56:40 +0100 Subject: [PATCH] Mediumslab: pre-factor init() to take explicit self --- src/mem/alloc.h | 2 +- src/mem/mediumslab.h | 23 +++++++++++++---------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/mem/alloc.h b/src/mem/alloc.h index e563784..55e3a33 100644 --- a/src/mem/alloc.h +++ b/src/mem/alloc.h @@ -1310,7 +1310,7 @@ namespace snmalloc if (slab == nullptr) return nullptr; - slab->init(public_state(), sizeclass, rsize); + Mediumslab::init(slab, public_state(), sizeclass, rsize); chunkmap().set_slab(slab); p = Mediumslab::alloc(slab, size); diff --git a/src/mem/mediumslab.h b/src/mem/mediumslab.h index ee167f2..dc39da4 100644 --- a/src/mem/mediumslab.h +++ b/src/mem/mediumslab.h @@ -50,29 +50,32 @@ namespace snmalloc const_cast(p)); } - void init(RemoteAllocator* alloc, sizeclass_t sc, size_t rsize) + // This is pre-factored to take an explicit self parameter so that we can + // eventually annotate that pointer with additional information. + static void + init(Mediumslab* self, RemoteAllocator* alloc, sizeclass_t sc, size_t rsize) { SNMALLOC_ASSERT(sc >= NUM_SMALL_CLASSES); SNMALLOC_ASSERT((sc - NUM_SMALL_CLASSES) < NUM_MEDIUM_CLASSES); - allocator = alloc; - head = 0; + self->allocator = alloc; + self->head = 0; // If this was previously a Mediumslab of the same sizeclass, don't // initialise the allocation stack. - if ((kind != Medium) || (sizeclass != sc)) + if ((self->kind != Medium) || (self->sizeclass != sc)) { - sizeclass = static_cast(sc); + self->sizeclass = static_cast(sc); uint16_t ssize = static_cast(rsize >> 8); - kind = Medium; - free = medium_slab_free(sc); - for (uint16_t i = free; i > 0; i--) - stack[free - i] = + self->kind = Medium; + self->free = medium_slab_free(sc); + for (uint16_t i = self->free; i > 0; i--) + self->stack[self->free - i] = static_cast((SUPERSLAB_SIZE >> 8) - (i * ssize)); } else { - SNMALLOC_ASSERT(free == medium_slab_free(sc)); + SNMALLOC_ASSERT(self->free == medium_slab_free(sc)); } }