From 5e1c8f73ae98d35de8101477fe64e01403811e4f Mon Sep 17 00:00:00 2001 From: Georg Hopp Date: Sat, 14 Jun 2014 10:55:06 +0100 Subject: [PATCH] fix optimization for GNU memory management --- src/memory.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/memory.c b/src/memory.c index f56f404..55550cc 100644 --- a/src/memory.c +++ b/src/memory.c @@ -736,7 +736,6 @@ TR_malloc(size_t size) { struct memSegment * seg = NULL; long psize = sysconf(_SC_PAGESIZE); - size_t check; size += sizeof(struct memSegment); @@ -746,12 +745,17 @@ TR_malloc(size_t size) size = ((size / psize) + 1) * psize; } } else { - check = size >> 1; - check = (size | check) - check; + if (size < 8) { + size = 8; + } else { + size_t check = size; + size_t mask = 1; + + while (check >>= 1) { + mask = (mask << 1) | 1; + } - if (check != size) { - // size is not a power of 2 so bring it to one. - size = ((size << 1) | size) - size; + size = (size << 1) & ~mask; } }