| 723 | } |
| 724 | |
| 725 | static void mi_segment_slice_split(mi_segment_t* segment, mi_slice_t* slice, size_t slice_count, mi_segments_tld_t* tld) { |
| 726 | mi_assert_internal(_mi_ptr_segment(slice) == segment); |
| 727 | mi_assert_internal(slice->slice_count >= slice_count); |
| 728 | mi_assert_internal(slice->xblock_size > 0); // no more in free queue |
| 729 | if (slice->slice_count <= slice_count) return; |
| 730 | mi_assert_internal(segment->kind != MI_SEGMENT_HUGE); |
| 731 | size_t next_index = mi_slice_index(slice) + slice_count; |
| 732 | size_t next_count = slice->slice_count - slice_count; |
| 733 | mi_segment_span_free(segment, next_index, next_count, false /* don't decommit left-over part */, tld); |
| 734 | slice->slice_count = (uint32_t)slice_count; |
| 735 | } |
| 736 | |
| 737 | static mi_page_t* mi_segments_page_find_and_allocate(size_t slice_count, mi_arena_id_t req_arena_id, mi_segments_tld_t* tld) { |
| 738 | mi_assert_internal(slice_count*MI_SEGMENT_SLICE_SIZE <= MI_LARGE_OBJ_SIZE_MAX); |
no test coverage detected