Home | History | Annotate | Download | only in internal
      1 #ifndef JEMALLOC_INTERNAL_TCACHE_EXTERNS_H
      2 #define JEMALLOC_INTERNAL_TCACHE_EXTERNS_H
      3 
      4 #include "jemalloc/internal/size_classes.h"
      5 
      6 extern bool	opt_tcache;
      7 extern ssize_t	opt_lg_tcache_max;
      8 
      9 extern cache_bin_info_t	*tcache_bin_info;
     10 
     11 /*
     12  * Number of tcache bins.  There are NBINS small-object bins, plus 0 or more
     13  * large-object bins.
     14  */
     15 extern unsigned	nhbins;
     16 
     17 /* Maximum cached size class. */
     18 extern size_t	tcache_maxclass;
     19 
     20 /*
     21  * Explicit tcaches, managed via the tcache.{create,flush,destroy} mallctls and
     22  * usable via the MALLOCX_TCACHE() flag.  The automatic per thread tcaches are
     23  * completely disjoint from this data structure.  tcaches starts off as a sparse
     24  * array, so it has no physical memory footprint until individual pages are
     25  * touched.  This allows the entire array to be allocated the first time an
     26  * explicit tcache is created without a disproportionate impact on memory usage.
     27  */
     28 extern tcaches_t	*tcaches;
     29 
     30 size_t	tcache_salloc(tsdn_t *tsdn, const void *ptr);
     31 void	tcache_event_hard(tsd_t *tsd, tcache_t *tcache);
     32 void	*tcache_alloc_small_hard(tsdn_t *tsdn, arena_t *arena, tcache_t *tcache,
     33     cache_bin_t *tbin, szind_t binind, bool *tcache_success);
     34 void	tcache_bin_flush_small(tsd_t *tsd, tcache_t *tcache, cache_bin_t *tbin,
     35     szind_t binind, unsigned rem);
     36 void	tcache_bin_flush_large(tsd_t *tsd, cache_bin_t *tbin, szind_t binind,
     37     unsigned rem, tcache_t *tcache);
     38 void	tcache_arena_reassociate(tsdn_t *tsdn, tcache_t *tcache,
     39     arena_t *arena);
     40 tcache_t *tcache_create_explicit(tsd_t *tsd);
     41 void	tcache_cleanup(tsd_t *tsd);
     42 void	tcache_stats_merge(tsdn_t *tsdn, tcache_t *tcache, arena_t *arena);
     43 bool	tcaches_create(tsd_t *tsd, unsigned *r_ind);
     44 void	tcaches_flush(tsd_t *tsd, unsigned ind);
     45 void	tcaches_destroy(tsd_t *tsd, unsigned ind);
     46 bool	tcache_boot(tsdn_t *tsdn);
     47 void tcache_arena_associate(tsdn_t *tsdn, tcache_t *tcache, arena_t *arena);
     48 void tcache_prefork(tsdn_t *tsdn);
     49 void tcache_postfork_parent(tsdn_t *tsdn);
     50 void tcache_postfork_child(tsdn_t *tsdn);
     51 void tcache_flush(tsd_t *tsd);
     52 bool tsd_tcache_data_init(tsd_t *tsd);
     53 bool tsd_tcache_enabled_data_init(tsd_t *tsd);
     54 
     55 #endif /* JEMALLOC_INTERNAL_TCACHE_EXTERNS_H */
     56