Mediumslab: pre-factor init() to take explicit self

This commit is contained in:
Nathaniel Filardo
2021-03-31 19:56:40 +01:00
committed by Nathaniel Wesley Filardo
parent d1b2522a10
commit a1f17e6060
2 changed files with 14 additions and 11 deletions

View File

@@ -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<zero_mem, typename MemoryProvider::Pal>(slab, size);

View File

@@ -50,29 +50,32 @@ namespace snmalloc
const_cast<void*>(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<uint8_t>(sc);
self->sizeclass = static_cast<uint8_t>(sc);
uint16_t ssize = static_cast<uint16_t>(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<uint16_t>((SUPERSLAB_SIZE >> 8) - (i * ssize));
}
else
{
SNMALLOC_ASSERT(free == medium_slab_free(sc));
SNMALLOC_ASSERT(self->free == medium_slab_free(sc));
}
}