From 86757dfbd644fee2f13d5b8dfba2ad9f2fd7b9a2 Mon Sep 17 00:00:00 2001 From: Daan Date: Tue, 3 Jun 2025 13:36:05 -0700 Subject: [PATCH] improve precision of malloc_huge statistic by always using the global os stats --- src/arena.c | 11 ++++------- src/heap.c | 7 ++----- src/page.c | 4 ++-- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/arena.c b/src/arena.c index 225bff17..0d86669b 100644 --- a/src/arena.c +++ b/src/arena.c @@ -817,20 +817,17 @@ void _mi_arenas_page_free(mi_page_t* page, mi_tld_t* stats_tld /* can be NULL */ mi_assert_internal(page->next==NULL && page->prev==NULL); // statistics - const size_t block_size = mi_page_block_size(page); if (stats_tld != NULL) { mi_tld_stat_decrease(stats_tld, page_bins[_mi_page_bin(page)], 1); mi_tld_stat_decrease(stats_tld, pages, 1); - if (block_size > MI_LARGE_MAX_OBJ_SIZE) { - mi_tld_stat_decrease(stats_tld, malloc_huge, block_size); - } } else { mi_os_stat_decrease(page_bins[_mi_page_bin(page)], 1); mi_os_stat_decrease(pages, 1); - if (block_size > MI_LARGE_MAX_OBJ_SIZE) { - mi_os_stat_decrease(malloc_huge, block_size); - } + } + const size_t block_size = mi_page_block_size(page); + if (mi_page_is_huge(page)) { + mi_os_stat_decrease(malloc_huge, block_size); } // assertions diff --git a/src/heap.c b/src/heap.c index 85285bdb..ee373773 100644 --- a/src/heap.c +++ b/src/heap.c @@ -329,14 +329,11 @@ static bool _mi_heap_page_destroy(mi_heap_t* heap, mi_page_queue_t* pq, mi_page_ //_mi_page_use_delayed_free(page, MI_NEVER_DELAYED_FREE, false); // stats - const size_t bsize = mi_page_block_size(page); - if (bsize > MI_LARGE_MAX_OBJ_SIZE) { - mi_heap_stat_decrease(heap, malloc_huge, bsize); - } #if (MI_STAT) _mi_page_free_collect(page, false); // update used count - const size_t inuse = page->used; + const size_t bsize = mi_page_block_size(page); if (bsize <= MI_LARGE_MAX_OBJ_SIZE) { + const size_t inuse = page->used; mi_heap_stat_decrease(heap, malloc_normal, bsize * inuse); #if (MI_STAT>1) mi_heap_stat_decrease(heap, malloc_bins[_mi_bin(bsize)], inuse); diff --git a/src/page.c b/src/page.c index d8c6cbca..36883adc 100644 --- a/src/page.c +++ b/src/page.c @@ -905,8 +905,8 @@ static mi_page_t* mi_huge_page_alloc(mi_heap_t* heap, size_t size, size_t page_a mi_assert_internal(mi_page_is_abandoned(page)); mi_page_set_heap(page, NULL); #endif - mi_heap_stat_increase(heap, malloc_huge, mi_page_block_size(page)); - mi_heap_stat_counter_increase(heap, malloc_huge_count, 1); + mi_os_stat_increase(malloc_huge, mi_page_block_size(page)); + mi_os_stat_counter_increase(malloc_huge_count, 1); } return page; }