From d278c26c0ec8fd919ad02b04b7151696942d2084 Mon Sep 17 00:00:00 2001 From: Daan Leijen Date: Tue, 10 Sep 2019 07:54:31 -0700 Subject: [PATCH] round huge page sizes into 12.5% increments (issue #153) --- src/page.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/page.c b/src/page.c index 62490dd6..c9226c64 100644 --- a/src/page.c +++ b/src/page.c @@ -727,7 +727,10 @@ void mi_register_deferred_free(mi_deferred_free_fun* fn) mi_attr_noexcept { // just that page, we always treat them as abandoned and any thread // that frees the block can free the whole page and segment directly. static mi_page_t* mi_huge_page_alloc(mi_heap_t* heap, size_t size) { - size_t block_size = _mi_wsize_from_size(size) * sizeof(uintptr_t); + size_t align_size = _mi_os_page_size(); + if (align_size < (size / 8)) align_size = _mi_align_up(size / 8, align_size); + if (align_size > MI_SEGMENT_SIZE) align_size = MI_SEGMENT_SIZE; + size_t block_size = _mi_align_up(size, align_size); mi_assert_internal(_mi_bin(block_size) == MI_BIN_HUGE); mi_page_t* page = mi_page_fresh_alloc(heap,NULL,block_size); if (page != NULL) {