From ee2af7ddddd98c085cf201f074a0894d5c07336d Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Tue, 29 Apr 2014 20:44:20 +0000 Subject: [PATCH] Avoid fetching the size class more than once. This is noticeably faster. --- src/backend/utils/mmgr/sb_alloc.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/backend/utils/mmgr/sb_alloc.c b/src/backend/utils/mmgr/sb_alloc.c index 1fdcef3575..fc2e43d18d 100644 --- a/src/backend/utils/mmgr/sb_alloc.c +++ b/src/backend/utils/mmgr/sb_alloc.c @@ -285,6 +285,7 @@ sb_free(void *ptr) char *superblock; Size pageno; Size obsize; + uint16 size_class; /* Locate the containing superblock. */ region = sb_lookup_region(ptr); @@ -305,9 +306,12 @@ sb_free(void *ptr) LWLockAcquire(lock, LW_EXCLUSIVE); } + /* Compute the object size. */ + size_class = span->size_class; + obsize = sb_size_classes[size_class]; + /* Put the object on the superblock's freelist. */ superblock = relptr_access(base, span->start); - obsize = sb_size_classes[span->size_class]; Assert(((char *) ptr) >= superblock); Assert(((char *) ptr) < superblock + SB_SUPERBLOCK_SIZE); Assert((((char *) ptr) - superblock) % obsize == 0); @@ -340,10 +344,8 @@ sb_free(void *ptr) { sb_heap *heap = relptr_access(base, span->parent); Size first_page; - uint16 size_class; sb_unlink_span(base, heap, span); - size_class = span->size_class; first_page = fpm_pointer_to_page(fpm_base, relptr_access(base, span->start)); FreePageManagerPut(region->fpm, first_page, span->npages); -- 2.39.5