From 16ef25b5eda3a9fc51ecea309d2cb6b0508b009b Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Sun, 11 Aug 2019 16:53:06 +0200 Subject: improve bumpptr_alloc Return always 16 Byte aligned blocks and mmap the whole available memory reported by free -t per thread. --- src/bumpptr_alloc.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'src/bumpptr_alloc.c') diff --git a/src/bumpptr_alloc.c b/src/bumpptr_alloc.c index 2690809..576dc40 100644 --- a/src/bumpptr_alloc.c +++ b/src/bumpptr_alloc.c @@ -6,7 +6,11 @@ #include /* memset */ #include /* memset */ +#define MIN_ALIGNMENT 16 + +#ifndef MEMSIZE #define MEMSIZE 1024*4*1024*1024l +#endif #ifdef __cplusplus extern "C" { @@ -27,6 +31,12 @@ void* malloc(size_t size) { ptr = (uintptr_t)mem_start; } + // align ptr; + if (ptr % MIN_ALIGNMENT != 0) { + size_t mask = MIN_ALIGNMENT -1; + ptr = (ptr + mask) & ~mask; + } + void* ret = (void*)ptr; ptr += size; return ret; @@ -49,8 +59,9 @@ void* realloc(void* ptr, size_t size) { } void* memalign(size_t alignment, size_t size) { - // bump ptr to alignment and malloc - ptr = (ptr + (alignment - 1)) & -alignment; + // align ptr to alignment and malloc + size_t mask = alignment - 1; + ptr = (ptr + mask) & ~mask; return malloc(size); } -- cgit v1.2.3