Merge branch 'dev-slice' into dev-slice-cmask
This commit is contained in:
commit
c46a6f66c6
@ -80,6 +80,7 @@ bool _mi_os_decommit(void* p, size_t size, mi_stats_t* stats);
|
|||||||
bool _mi_os_reset(void* p, size_t size, mi_stats_t* stats);
|
bool _mi_os_reset(void* p, size_t size, mi_stats_t* stats);
|
||||||
bool _mi_os_unreset(void* p, size_t size, bool* is_zero, mi_stats_t* stats);
|
bool _mi_os_unreset(void* p, size_t size, bool* is_zero, mi_stats_t* stats);
|
||||||
size_t _mi_os_good_alloc_size(size_t size);
|
size_t _mi_os_good_alloc_size(size_t size);
|
||||||
|
bool _mi_os_has_overcommit(void);
|
||||||
|
|
||||||
// arena.c
|
// arena.c
|
||||||
void* _mi_arena_alloc_aligned(size_t size, size_t alignment, bool* commit, bool* large, bool* is_pinned, bool* is_zero, size_t* memid, mi_os_tld_t* tld);
|
void* _mi_arena_alloc_aligned(size_t size, size_t alignment, bool* commit, bool* large, bool* is_pinned, bool* is_zero, size_t* memid, mi_os_tld_t* tld);
|
||||||
|
6
src/os.c
6
src/os.c
@ -90,6 +90,10 @@ static size_t large_os_page_size = 0;
|
|||||||
// set dynamically in _mi_os_init (and if true we use MAP_NORESERVE)
|
// set dynamically in _mi_os_init (and if true we use MAP_NORESERVE)
|
||||||
static bool os_overcommit = true;
|
static bool os_overcommit = true;
|
||||||
|
|
||||||
|
bool _mi_os_has_overcommit(void) {
|
||||||
|
return os_overcommit;
|
||||||
|
}
|
||||||
|
|
||||||
// OS (small) page size
|
// OS (small) page size
|
||||||
size_t _mi_os_page_size() {
|
size_t _mi_os_page_size() {
|
||||||
return os_page_size;
|
return os_page_size;
|
||||||
@ -463,7 +467,7 @@ static void* mi_unix_mmap(void* addr, size_t size, size_t try_alignment, int pro
|
|||||||
#endif
|
#endif
|
||||||
const int fd = mi_unix_mmap_fd();
|
const int fd = mi_unix_mmap_fd();
|
||||||
int flags = MAP_PRIVATE | MAP_ANONYMOUS;
|
int flags = MAP_PRIVATE | MAP_ANONYMOUS;
|
||||||
if (os_overcommit) {
|
if (_mi_os_has_overcommit()) {
|
||||||
flags |= MAP_NORESERVE;
|
flags |= MAP_NORESERVE;
|
||||||
}
|
}
|
||||||
#if defined(PROT_MAX)
|
#if defined(PROT_MAX)
|
||||||
|
@ -579,7 +579,7 @@ static void mi_segment_perhaps_decommit(mi_segment_t* segment, uint8_t* p, size_
|
|||||||
else if (segment->decommit_expire <= now) {
|
else if (segment->decommit_expire <= now) {
|
||||||
// previous decommit mask already expired
|
// previous decommit mask already expired
|
||||||
// mi_segment_delayed_decommit(segment, true, stats);
|
// mi_segment_delayed_decommit(segment, true, stats);
|
||||||
segment->decommit_expire = now + 5; // wait a tiny bit longer in case there is a series of free's
|
segment->decommit_expire = now + (mi_option_get(mi_option_reset_delay) / 8); // wait a tiny bit longer in case there is a series of free's
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// previous decommit mask is not yet expired
|
// previous decommit mask is not yet expired
|
||||||
@ -809,7 +809,9 @@ static mi_segment_t* mi_segment_init(mi_segment_t* segment, size_t required, mi_
|
|||||||
const size_t segment_size = segment_slices * MI_SEGMENT_SLICE_SIZE;
|
const size_t segment_size = segment_slices * MI_SEGMENT_SLICE_SIZE;
|
||||||
|
|
||||||
// Commit eagerly only if not the first N lazy segments (to reduce impact of many threads that allocate just a little)
|
// Commit eagerly only if not the first N lazy segments (to reduce impact of many threads that allocate just a little)
|
||||||
const bool eager_delay = (_mi_current_thread_count() > 2 && tld->count < (size_t)mi_option_get(mi_option_eager_commit_delay));
|
const bool eager_delay = (!_mi_os_has_overcommit() && // never delay on overcommit systems
|
||||||
|
_mi_current_thread_count() > 2 && // do not delay for the first N threads
|
||||||
|
tld->count < (size_t)mi_option_get(mi_option_eager_commit_delay));
|
||||||
const bool eager = !eager_delay && mi_option_is_enabled(mi_option_eager_commit);
|
const bool eager = !eager_delay && mi_option_is_enabled(mi_option_eager_commit);
|
||||||
bool commit = eager || (required > 0);
|
bool commit = eager || (required > 0);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user