diff --git a/include/mimalloc.h b/include/mimalloc.h index b63ed79d..a9c339e9 100644 --- a/include/mimalloc.h +++ b/include/mimalloc.h @@ -261,7 +261,6 @@ typedef enum mi_option_e { mi_option_verbose, // the following options are experimental mi_option_eager_commit, - mi_option_eager_region_commit, mi_option_large_os_pages, // implies eager commit mi_option_reserve_huge_os_pages, mi_option_segment_cache, @@ -269,6 +268,7 @@ typedef enum mi_option_e { mi_option_cache_reset, mi_option_reset_decommits, mi_option_eager_commit_delay, + mi_option_allow_decommit, mi_option_segment_reset, mi_option_os_tag, _mi_option_last diff --git a/src/options.c b/src/options.c index 99e90c46..31af819b 100644 --- a/src/options.c +++ b/src/options.c @@ -53,11 +53,6 @@ static mi_option_desc_t options[_mi_option_last] = // the following options are experimental and not all combinations make sense. { 1, UNINIT, MI_OPTION(eager_commit) }, // note: needs to be on when eager_region_commit is enabled - #ifdef _WIN32 // and BSD? - { 0, UNINIT, MI_OPTION(eager_region_commit) }, // don't commit too eagerly on windows (just for looks...) - #else - { 1, UNINIT, MI_OPTION(eager_region_commit) }, - #endif { 0, UNINIT, MI_OPTION(large_os_pages) }, // use large OS pages, use only with eager commit to prevent fragmentation of VMA's { 0, UNINIT, MI_OPTION(reserve_huge_os_pages) }, { 0, UNINIT, MI_OPTION(segment_cache) }, // cache N segments per thread @@ -65,6 +60,7 @@ static mi_option_desc_t options[_mi_option_last] = { 0, UNINIT, MI_OPTION(cache_reset) }, { 0, UNINIT, MI_OPTION(reset_decommits) }, // note: cannot enable this if secure is on { 0, UNINIT, MI_OPTION(eager_commit_delay) }, // the first N segments per thread are not eagerly committed + { 0, UNINIT, MI_OPTION(allow_decommit) }, // decommit pages when not eager committed { 0, UNINIT, MI_OPTION(segment_reset) }, // reset segment memory on free (needs eager commit) { 100, UNINIT, MI_OPTION(os_tag) } // only apple specific for now but might serve more or less related purpose }; diff --git a/src/segment.c b/src/segment.c index 8a02acac..41cf08d9 100644 --- a/src/segment.c +++ b/src/segment.c @@ -634,7 +634,7 @@ static mi_segment_t* mi_segment_alloc(size_t required, mi_segments_tld_t* tld, m segment->cookie = _mi_ptr_cookie(segment); segment->slice_entries = slice_entries; segment->kind = (required == 0 ? MI_SEGMENT_NORMAL : MI_SEGMENT_HUGE); - segment->allow_decommit = !commit; + segment->allow_decommit = !commit && mi_option_is_enabled(mi_option_allow_decommit); segment->commit_mask = (!commit ? 0x01 : ~((uintptr_t)0)); // on lazy commit, the initial part is always committed // memset(segment->slices, 0, sizeof(mi_slice_t)*(info_slices+1)); _mi_stat_increase(&tld->stats->page_committed, mi_segment_info_size(segment));