mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-07-07 03:48:42 +03:00
Various performance tuning
This commit is contained in:
parent
277abfeb48
commit
ad18e02994
12 changed files with 59 additions and 38 deletions
|
@ -348,8 +348,10 @@ typedef enum mi_option_e {
|
|||
mi_option_abandoned_reclaim_on_free, // allow to reclaim an abandoned segment on a free (=1)
|
||||
mi_option_disallow_arena_alloc, // 1 = do not use arena's for allocation (except if using specific arena id's)
|
||||
mi_option_retry_on_oom, // retry on out-of-memory for N milli seconds (=400), set to 0 to disable retries. (only on windows)
|
||||
mi_option_max_segments_per_heap, // max number of segments that heap can own
|
||||
mi_option_heap_collect_abandoned_interval, // interval (in ms) between collecting abandoned segments when a heap drops exessive segments
|
||||
mi_option_max_segments_per_heap, // max number of segments that heap can own
|
||||
mi_option_heap_collect_abandoned_interval, // interval (in ms) between collecting abandoned segments when a heap drops excessive segments
|
||||
mi_option_heap_collect_abandoned_count, // number of abandoned segments to collect when a heap drops excessive segments
|
||||
mi_option_max_candidate_segments_to_check, // max number of abandoned segments to check before selecting one to reclaim
|
||||
_mi_option_last,
|
||||
// legacy option names
|
||||
mi_option_large_os_pages = mi_option_allow_large_os_pages,
|
||||
|
|
|
@ -164,6 +164,7 @@ uint8_t* _mi_segment_page_start(const mi_segment_t* segment, const mi_page_t*
|
|||
void _mi_abandoned_reclaim_all(mi_heap_t* heap, mi_segments_tld_t* tld);
|
||||
void _mi_abandoned_await_readers(void);
|
||||
void _mi_abandoned_collect(mi_heap_t* heap, bool force, mi_segments_tld_t* tld);
|
||||
void _mi_abandoned_collect_clamp(mi_heap_t* heap, bool force, long max_segment_count, mi_segments_tld_t* tld);
|
||||
bool _mi_segment_attempt_reclaim(mi_heap_t* heap, mi_segment_t* segment);
|
||||
|
||||
// "page.c"
|
||||
|
@ -602,6 +603,10 @@ static inline mi_page_queue_t* mi_page_queue(const mi_heap_t* heap, size_t size)
|
|||
return &((mi_heap_t*)heap)->pages[_mi_bin(size)];
|
||||
}
|
||||
|
||||
static inline mi_page_queue_t* mi_queue_of_page(const mi_heap_t* heap, const mi_page_t* page) {
|
||||
return &((mi_heap_t*)heap)->pages[page->bin_index];
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------
|
||||
|
|
|
@ -327,6 +327,8 @@ typedef struct mi_page_s {
|
|||
uint8_t block_size_shift; // if not zero, then `(1 << block_size_shift) == block_size` (only used for fast path in `free.c:_mi_page_ptr_unalign`)
|
||||
uint8_t heap_tag; // tag of the owning heap, used for separated heaps by object type
|
||||
// padding
|
||||
uint8_t bin_index; // bin index of the page queue this page belongs to
|
||||
size_t free_space_bit; // a bit/mask for marking quickly free_space_mask of the owning segment
|
||||
size_t block_size; // size available in each block (always `>0`)
|
||||
uint8_t* page_start; // start of the page area containing the blocks
|
||||
|
||||
|
@ -504,7 +506,6 @@ typedef struct mi_page_queue_s {
|
|||
mi_page_t* first;
|
||||
mi_page_t* last;
|
||||
size_t block_size;
|
||||
size_t allocationCount;
|
||||
} mi_page_queue_t;
|
||||
|
||||
#define MI_BIN_FULL (MI_BIN_HUGE+1)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue