diff options
Diffstat (limited to 'src/memory.c')
-rw-r--r-- | src/memory.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/memory.c b/src/memory.c index 0f9f5de..80351ed 100644 --- a/src/memory.c +++ b/src/memory.c @@ -461,11 +461,20 @@ void _mi_mem_free(void* p, size_t size, size_t id, mi_stats_t* stats) { // reset: 10x slowdown on malloc-large, decommit: 17x slowdown on malloc-large if (!is_large) { if (mi_option_is_enabled(mi_option_segment_reset)) { - _mi_os_reset(p, size, stats); // - // _mi_os_decommit(p,size,stats); // if !is_eager_committed (and clear dirty bits) + if (!is_eager_committed && // cannot reset large pages + (mi_option_is_enabled(mi_option_eager_commit) || // cannot reset halfway committed segments, use `option_page_reset` instead + mi_option_is_enabled(mi_option_reset_decommits))) // but we can decommit halfway committed segments + { + _mi_os_reset(p, size, stats); + //_mi_os_decommit(p, size, stats); // todo: and clear dirty bits? + } } +<<<<<<< HEAD // else { _mi_os_reset(p,size,stats); } } +======= + } +>>>>>>> dev if (!is_eager_committed) { // adjust commit statistics as we commit again when re-using the same slot _mi_stat_decrease(&stats->committed, mi_good_commit_size(size)); |