From 8233e94ab3cf2ca91639bb94a5ad0a992b41f492 Mon Sep 17 00:00:00 2001 From: Laria Carolin Chabowski Date: Tue, 21 Mar 2023 20:54:09 +0100 Subject: [PATCH] gc: Speed up new_object by adding new blocks to the front of the list This way we don't have to traverse the whole list to the very end every time we want a new object. --- src/gc.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/gc.c b/src/gc.c index bbfdfe9..0169ce6 100644 --- a/src/gc.c +++ b/src/gc.c @@ -124,17 +124,17 @@ new_block(struct gc *gc) static struct gc_object * new_object_inner(struct gc *gc) { - struct gc_block **cur = &gc->block; + struct gc_block *cur = gc->block; - while (*cur != NULL) { - struct gc_block *block = *cur; + while (cur != NULL) { + struct gc_block *block = cur; for (size_t i = 0; i < GC_OBJECTS_PER_BLOCK; i++) { if (block->objects[i].status == GC_STATUS_FREE) { return &block->objects[i]; } } - cur = &block->next; + cur = block->next; } struct gc_block *nb = new_block(gc); @@ -142,7 +142,8 @@ new_object_inner(struct gc *gc) return NULL; } - *cur = nb; + nb->next = gc->block; + gc->block = nb; return &nb->objects[0]; }