MCPcopy Create free account
hub / github.com/CppCXY/EmmyLuaCodeStyle / mi_page_fresh_alloc

Function mi_page_fresh_alloc

3rd/mimalloc-2.0.9/src/page.c:262–284  ·  view source on GitHub ↗

allocate a fresh page from a segment

Source from the content-addressed store, hash-verified

260
261// allocate a fresh page from a segment
262static mi_page_t* mi_page_fresh_alloc(mi_heap_t* heap, mi_page_queue_t* pq, size_t block_size, size_t page_alignment) {
263 #if !MI_HUGE_PAGE_ABANDON
264 mi_assert_internal(pq != NULL);
265 mi_assert_internal(mi_heap_contains_queue(heap, pq));
266 mi_assert_internal(page_alignment > 0 || block_size > MI_MEDIUM_OBJ_SIZE_MAX || block_size == pq->block_size);
267 #endif
268 mi_page_t* page = _mi_segment_page_alloc(heap, block_size, page_alignment, &heap->tld->segments, &heap->tld->os);
269 if (page == NULL) {
270 // this may be out-of-memory, or an abandoned page was reclaimed (and in our queue)
271 return NULL;
272 }
273 mi_assert_internal(page_alignment >0 || block_size > MI_MEDIUM_OBJ_SIZE_MAX || _mi_page_segment(page)->kind != MI_SEGMENT_HUGE);
274 mi_assert_internal(pq!=NULL || page->xblock_size != 0);
275 mi_assert_internal(pq!=NULL || mi_page_block_size(page) >= block_size);
276 // a fresh page was found, initialize it
277 const size_t full_block_size = ((pq == NULL || mi_page_queue_is_huge(pq)) ? mi_page_block_size(page) : block_size); // see also: mi_segment_huge_page_alloc
278 mi_assert_internal(full_block_size >= block_size);
279 mi_page_init(heap, page, full_block_size, heap->tld);
280 mi_heap_stat_increase(heap, pages, 1);
281 if (pq != NULL) { mi_page_queue_push(heap, pq, page); }
282 mi_assert_expensive(_mi_page_is_valid(page));
283 return page;
284}
285
286// Get a fresh page to use
287static mi_page_t* mi_page_fresh(mi_heap_t* heap, mi_page_queue_t* pq) {

Callers 2

mi_page_freshFunction · 0.85
mi_large_huge_page_allocFunction · 0.85

Calls 8

mi_heap_contains_queueFunction · 0.85
_mi_segment_page_allocFunction · 0.85
_mi_page_segmentFunction · 0.85
mi_page_block_sizeFunction · 0.85
mi_page_queue_is_hugeFunction · 0.85
mi_page_initFunction · 0.85
mi_page_queue_pushFunction · 0.85
_mi_page_is_validFunction · 0.85

Tested by

no test coverage detected