mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-05-06 15:29:31 +03:00
Merge branch 'dev' into dev3
This commit is contained in:
commit
18bc6d9056
1 changed files with 10 additions and 3 deletions
13
src/page.c
13
src/page.c
|
@ -944,14 +944,21 @@ void* _mi_malloc_generic(mi_heap_t* heap, size_t size, bool zero, size_t huge_al
|
||||||
mi_assert_internal(_mi_ptr_page(page)==page);
|
mi_assert_internal(_mi_ptr_page(page)==page);
|
||||||
|
|
||||||
// and try again, this time succeeding! (i.e. this should never recurse through _mi_page_malloc)
|
// and try again, this time succeeding! (i.e. this should never recurse through _mi_page_malloc)
|
||||||
|
void* p;
|
||||||
if mi_unlikely(zero && mi_page_is_huge(page)) {
|
if mi_unlikely(zero && mi_page_is_huge(page)) {
|
||||||
// note: we cannot call _mi_page_malloc with zeroing for huge blocks; we zero it afterwards in that case.
|
// note: we cannot call _mi_page_malloc with zeroing for huge blocks; we zero it afterwards in that case.
|
||||||
void* p = _mi_page_malloc(heap, page, size);
|
p = _mi_page_malloc(heap, page, size);
|
||||||
mi_assert_internal(p != NULL);
|
mi_assert_internal(p != NULL);
|
||||||
_mi_memzero_aligned(p, mi_page_usable_block_size(page));
|
_mi_memzero_aligned(p, mi_page_usable_block_size(page));
|
||||||
return p;
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return _mi_page_malloc_zero(heap, page, size, zero);
|
p = _mi_page_malloc_zero(heap, page, size, zero);
|
||||||
|
mi_assert_internal(p != NULL);
|
||||||
}
|
}
|
||||||
|
// move singleton pages to the full queue
|
||||||
|
if (page->reserved == page->used) {
|
||||||
|
mi_assert_internal(page->reserved == 1);
|
||||||
|
mi_page_to_full(page, mi_page_queue_of(page));
|
||||||
|
}
|
||||||
|
return p;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue