mirror of
https://github.com/jemalloc/jemalloc.git
synced 2026-08-12 10:41:09 +03:00
Add config option limit-usize-gap and runtime option limit_usize_gap.
Adding a build-time config option (--enable-limit-usize-gap) and a runtime one (limit_usize_gap) to guard the changes. When build-time config is enabled, some minor CPU overhead is expected because usize will be stored and accessed apart from index. When runtime option is also enabled (it can only be enabled with the build-time config enabled). a new usize calculation approach wil be employed. This new calculation will ceil size to the closest multiple of PAGE for all sizes larger than USIZE_GROW_SLOW_THRESHOLD instead of using the size classes.
This commit is contained in:
parent
c17bf8b368
commit
eac4163a95
8 changed files with 60 additions and 0 deletions
|
|
@ -168,6 +168,7 @@ CTL_PROTO(opt_prof_sys_thread_name)
|
|||
CTL_PROTO(opt_prof_time_res)
|
||||
CTL_PROTO(opt_lg_san_uaf_align)
|
||||
CTL_PROTO(opt_zero_realloc)
|
||||
CTL_PROTO(opt_limit_usize_gap)
|
||||
CTL_PROTO(opt_malloc_conf_symlink)
|
||||
CTL_PROTO(opt_malloc_conf_env_var)
|
||||
CTL_PROTO(opt_malloc_conf_global_var)
|
||||
|
|
@ -557,6 +558,7 @@ static const ctl_named_node_t opt_node[] = {
|
|||
{NAME("zero_realloc"), CTL(opt_zero_realloc)},
|
||||
{NAME("debug_double_free_max_scan"),
|
||||
CTL(opt_debug_double_free_max_scan)},
|
||||
{NAME("limit_usize_gap"), CTL(opt_limit_usize_gap)},
|
||||
{NAME("malloc_conf"), CHILD(named, opt_malloc_conf)}
|
||||
};
|
||||
|
||||
|
|
@ -2341,6 +2343,8 @@ CTL_RO_NL_CGEN(config_uaf_detection, opt_lg_san_uaf_align,
|
|||
opt_lg_san_uaf_align, ssize_t)
|
||||
CTL_RO_NL_GEN(opt_zero_realloc,
|
||||
zero_realloc_mode_names[opt_zero_realloc_action], const char *)
|
||||
CTL_RO_NL_CGEN(config_limit_usize_gap, opt_limit_usize_gap, opt_limit_usize_gap,
|
||||
bool)
|
||||
|
||||
/* malloc_conf options */
|
||||
CTL_RO_NL_CGEN(opt_malloc_conf_symlink, opt_malloc_conf_symlink,
|
||||
|
|
|
|||
|
|
@ -123,6 +123,13 @@ zero_realloc_action_t opt_zero_realloc_action =
|
|||
|
||||
atomic_zu_t zero_realloc_count = ATOMIC_INIT(0);
|
||||
|
||||
bool opt_limit_usize_gap =
|
||||
#ifdef LIMIT_USIZE_GAP
|
||||
false;
|
||||
#else
|
||||
false;
|
||||
#endif
|
||||
|
||||
const char *const zero_realloc_mode_names[] = {
|
||||
"alloc",
|
||||
"free",
|
||||
|
|
@ -1763,6 +1770,11 @@ malloc_conf_init_helper(sc_data_t *sc_data, unsigned bin_shard_sizes[SC_NBINS],
|
|||
"san_guard_large", 0, SIZE_T_MAX,
|
||||
CONF_DONT_CHECK_MIN, CONF_DONT_CHECK_MAX, false)
|
||||
|
||||
if (config_limit_usize_gap) {
|
||||
CONF_HANDLE_BOOL(opt_limit_usize_gap,
|
||||
"limit_usize_gap");
|
||||
}
|
||||
|
||||
CONF_ERROR("Invalid conf pair", k, klen, v, vlen);
|
||||
#undef CONF_ERROR
|
||||
#undef CONF_CONTINUE
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue