2017-01-11 10:06:31 +08:00
|
|
|
#ifndef JEMALLOC_INTERNAL_TCACHE_EXTERNS_H
|
|
|
|
#define JEMALLOC_INTERNAL_TCACHE_EXTERNS_H
|
|
|
|
|
|
|
|
extern bool opt_tcache;
|
|
|
|
extern ssize_t opt_lg_tcache_max;
|
|
|
|
|
|
|
|
/*
|
2017-12-15 04:46:39 +08:00
|
|
|
* Number of tcache bins. There are SC_NBINS small-object bins, plus 0 or more
|
2017-01-11 10:06:31 +08:00
|
|
|
* large-object bins.
|
|
|
|
*/
|
|
|
|
extern unsigned nhbins;
|
|
|
|
|
|
|
|
/* Maximum cached size class. */
|
|
|
|
extern size_t tcache_maxclass;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Explicit tcaches, managed via the tcache.{create,flush,destroy} mallctls and
|
|
|
|
* usable via the MALLOCX_TCACHE() flag. The automatic per thread tcaches are
|
|
|
|
* completely disjoint from this data structure. tcaches starts off as a sparse
|
|
|
|
* array, so it has no physical memory footprint until individual pages are
|
|
|
|
* touched. This allows the entire array to be allocated the first time an
|
|
|
|
* explicit tcache is created without a disproportionate impact on memory usage.
|
|
|
|
*/
|
|
|
|
extern tcaches_t *tcaches;
|
|
|
|
|
2017-04-29 04:31:09 +08:00
|
|
|
size_t tcache_salloc(tsdn_t *tsdn, const void *ptr);
|
|
|
|
void tcache_event_hard(tsd_t *tsd, tcache_t *tcache);
|
|
|
|
void *tcache_alloc_small_hard(tsdn_t *tsdn, arena_t *arena, tcache_t *tcache,
|
2017-08-11 05:27:58 +08:00
|
|
|
cache_bin_t *tbin, szind_t binind, bool *tcache_success);
|
|
|
|
void tcache_bin_flush_small(tsd_t *tsd, tcache_t *tcache, cache_bin_t *tbin,
|
2017-01-11 10:06:31 +08:00
|
|
|
szind_t binind, unsigned rem);
|
2019-08-13 02:08:39 +08:00
|
|
|
void tcache_bin_flush_large(tsd_t *tsd, tcache_t *tcache, cache_bin_t *tbin,
|
|
|
|
szind_t binind, unsigned rem);
|
2017-04-29 04:31:09 +08:00
|
|
|
void tcache_arena_reassociate(tsdn_t *tsdn, tcache_t *tcache,
|
2017-03-07 04:51:41 +08:00
|
|
|
arena_t *arena);
|
2017-03-28 12:50:38 +08:00
|
|
|
tcache_t *tcache_create_explicit(tsd_t *tsd);
|
2017-04-29 04:31:09 +08:00
|
|
|
void tcache_cleanup(tsd_t *tsd);
|
|
|
|
void tcache_stats_merge(tsdn_t *tsdn, tcache_t *tcache, arena_t *arena);
|
2020-02-18 06:09:29 +08:00
|
|
|
bool tcaches_create(tsd_t *tsd, base_t *base, unsigned *r_ind);
|
2017-04-29 04:31:09 +08:00
|
|
|
void tcaches_flush(tsd_t *tsd, unsigned ind);
|
|
|
|
void tcaches_destroy(tsd_t *tsd, unsigned ind);
|
2020-02-18 06:09:29 +08:00
|
|
|
bool tcache_boot(tsdn_t *tsdn, base_t *base);
|
2017-03-28 12:50:38 +08:00
|
|
|
void tcache_arena_associate(tsdn_t *tsdn, tcache_t *tcache, arena_t *arena);
|
2017-01-30 13:32:39 +08:00
|
|
|
void tcache_prefork(tsdn_t *tsdn);
|
|
|
|
void tcache_postfork_parent(tsdn_t *tsdn);
|
|
|
|
void tcache_postfork_child(tsdn_t *tsdn);
|
2017-06-16 06:16:18 +08:00
|
|
|
void tcache_flush(tsd_t *tsd);
|
2017-03-28 12:50:38 +08:00
|
|
|
bool tsd_tcache_data_init(tsd_t *tsd);
|
|
|
|
bool tsd_tcache_enabled_data_init(tsd_t *tsd);
|
2017-01-11 10:06:31 +08:00
|
|
|
|
|
|
|
#endif /* JEMALLOC_INTERNAL_TCACHE_EXTERNS_H */
|