mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-07-01 17:24:38 +03:00
fix statistics for tracking the freed size of huge pages
This commit is contained in:
parent
3b567b1054
commit
2c839e7090
2 changed files with 11 additions and 5 deletions
11
src/arena.c
11
src/arena.c
|
@ -807,18 +807,27 @@ void _mi_arenas_page_free(mi_page_t* page, mi_tld_t* stats_tld /* can be NULL */
|
||||||
mi_assert_internal(mi_page_is_abandoned(page));
|
mi_assert_internal(mi_page_is_abandoned(page));
|
||||||
mi_assert_internal(page->next==NULL && page->prev==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) {
|
if (stats_tld != NULL) {
|
||||||
mi_tld_stat_decrease(stats_tld, page_bins[_mi_page_bin(page)], 1);
|
mi_tld_stat_decrease(stats_tld, page_bins[_mi_page_bin(page)], 1);
|
||||||
mi_tld_stat_decrease(stats_tld, pages, 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 {
|
else {
|
||||||
mi_os_stat_decrease(page_bins[_mi_page_bin(page)], 1);
|
mi_os_stat_decrease(page_bins[_mi_page_bin(page)], 1);
|
||||||
mi_os_stat_decrease(pages, 1);
|
mi_os_stat_decrease(pages, 1);
|
||||||
|
if (block_size > MI_LARGE_MAX_OBJ_SIZE) {
|
||||||
|
mi_os_stat_decrease(malloc_huge, block_size);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// assertions
|
||||||
#if MI_DEBUG>1
|
#if MI_DEBUG>1
|
||||||
if (page->memid.memkind==MI_MEM_ARENA && !mi_page_is_full(page)) {
|
if (page->memid.memkind==MI_MEM_ARENA && !mi_page_is_full(page)) {
|
||||||
size_t bin = _mi_bin(mi_page_block_size(page));
|
size_t bin = _mi_bin(block_size);
|
||||||
size_t slice_index;
|
size_t slice_index;
|
||||||
size_t slice_count;
|
size_t slice_count;
|
||||||
mi_arena_t* arena = mi_page_arena(page, &slice_index, &slice_count);
|
mi_arena_t* arena = mi_page_arena(page, &slice_index, &slice_count);
|
||||||
|
|
|
@ -543,10 +543,7 @@ void mi_stat_free(const mi_page_t* page, const mi_block_t* block) {
|
||||||
mi_heap_stat_decrease(heap, malloc_bins[_mi_bin(bsize)], 1);
|
mi_heap_stat_decrease(heap, malloc_bins[_mi_bin(bsize)], 1);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else {
|
// huge pages sizes are tracked in `arena.c:_mi_arenas_page_free`
|
||||||
const size_t bpsize = mi_page_block_size(page); // match stat in page.c:mi_huge_page_alloc
|
|
||||||
mi_heap_stat_decrease(heap, malloc_huge, bpsize);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
void mi_stat_free(const mi_page_t* page, const mi_block_t* block) {
|
void mi_stat_free(const mi_page_t* page, const mi_block_t* block) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue