mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-07-06 19:38:41 +03:00
Add global counters for segments and allocation stats
This commit is contained in:
parent
75eec9e61d
commit
0be44b2b0f
11 changed files with 304 additions and 7 deletions
|
@ -373,6 +373,16 @@ mi_decl_nodiscard mi_decl_export size_t mi_option_get_size(mi_option_t option);
|
|||
mi_decl_export void mi_option_set(mi_option_t option, long value);
|
||||
mi_decl_export void mi_option_set_default(mi_option_t option, long value);
|
||||
|
||||
typedef struct mi_allocation_counter_s {
|
||||
size_t counter;
|
||||
size_t block_size; // size of the allocation block that related to this counter (for example, the block that caused a new segmented to be allocated)
|
||||
} mi_allocation_counter_t;
|
||||
|
||||
mi_decl_export bool mi_get_segment_stats(size_t* abandoned, size_t* reclaimed, size_t* reclaim_failed, size_t* allocated, size_t* freed,
|
||||
mi_allocation_counter_t* allocated_segments, int allocated_segments_count,
|
||||
mi_allocation_counter_t* free_space_in_segments, int free_space_in_segments_count,
|
||||
mi_allocation_counter_t* allocated_memory, int allocated_memory_count);
|
||||
|
||||
|
||||
// -------------------------------------------------------------------------------------------------------
|
||||
// "mi" prefixed implementations of various posix, Unix, Windows, and C++ allocation functions.
|
||||
|
|
|
@ -181,6 +181,7 @@ void _mi_page_use_delayed_free(mi_page_t* page, mi_delayed_t delay, bool o
|
|||
bool _mi_page_try_use_delayed_free(mi_page_t* page, mi_delayed_t delay, bool override_never);
|
||||
size_t _mi_page_queue_append(mi_heap_t* heap, mi_page_queue_t* pq, mi_page_queue_t* append);
|
||||
void _mi_deferred_free(mi_heap_t* heap, bool force);
|
||||
mi_page_queue_t* mi_heap_page_queue_of(mi_heap_t* heap, const mi_page_t* page);
|
||||
|
||||
void _mi_page_free_collect(mi_page_t* page,bool force);
|
||||
void _mi_page_reclaim(mi_heap_t* heap, mi_page_t* page); // callback from segments
|
||||
|
@ -1017,5 +1018,11 @@ static inline void _mi_memzero_aligned(void* dst, size_t n) {
|
|||
}
|
||||
#endif
|
||||
|
||||
void mi_segment_increment_alloc_stats(size_t block_size);
|
||||
void mi_segment_increment_freed_stats();
|
||||
void mi_segment_increment_reclaimed_stats();
|
||||
void mi_segment_increment_reclaim_failed_stats();
|
||||
void mi_allocation_stats_increment(size_t block_size);
|
||||
void mi_allocation_stats_decrement(size_t block_size);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -503,6 +503,7 @@ 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)
|
||||
|
@ -646,6 +647,18 @@ typedef struct mi_stats_s {
|
|||
#endif
|
||||
} mi_stats_t;
|
||||
|
||||
typedef struct mi_segment_alloc_counter_s {
|
||||
_Atomic(size_t) counter;
|
||||
size_t block_size; // size of the allocation block that caused a new segmented to be allocated)
|
||||
} mi_segment_alloc_counter_t;
|
||||
|
||||
typedef struct mi_segment_stats_s {
|
||||
_Atomic(size_t) reclaimed_count;
|
||||
_Atomic(size_t) reclaim_failed_count;
|
||||
_Atomic(size_t) allocated_count;
|
||||
_Atomic(size_t) freed_count;
|
||||
mi_segment_alloc_counter_t alloc_stats[MI_BIN_HUGE+1];
|
||||
} mi_segment_stats_t;
|
||||
|
||||
void _mi_stat_increase(mi_stat_count_t* stat, size_t amount);
|
||||
void _mi_stat_decrease(mi_stat_count_t* stat, size_t amount);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue