| #ifndef JEMALLOC_INTERNAL_TCACHE_STRUCTS_H |
| #define JEMALLOC_INTERNAL_TCACHE_STRUCTS_H |
| |
| typedef enum { |
| tcache_enabled_false = 0, /* Enable cast to/from bool. */ |
| tcache_enabled_true = 1, |
| tcache_enabled_default = 2 |
| } tcache_enabled_t; |
| |
| /* |
| * Read-only information associated with each element of tcache_t's tbins array |
| * is stored separately, mainly to reduce memory usage. |
| */ |
| struct tcache_bin_info_s { |
| unsigned ncached_max; /* Upper limit on ncached. */ |
| }; |
| |
| struct tcache_bin_s { |
| tcache_bin_stats_t tstats; |
| int low_water; /* Min # cached since last GC. */ |
| unsigned lg_fill_div; /* Fill (ncached_max >> lg_fill_div). */ |
| unsigned ncached; /* # of cached objects. */ |
| /* |
| * To make use of adjacent cacheline prefetch, the items in the avail |
| * stack goes to higher address for newer allocations. avail points |
| * just above the available space, which means that |
| * avail[-ncached, ... -1] are available items and the lowest item will |
| * be allocated first. |
| */ |
| void **avail; /* Stack of available objects. */ |
| }; |
| |
| struct tcache_s { |
| ql_elm(tcache_t) link; /* Used for aggregating stats. */ |
| uint64_t prof_accumbytes;/* Cleared after arena_prof_accum(). */ |
| ticker_t gc_ticker; /* Drives incremental GC. */ |
| szind_t next_gc_bin; /* Next bin to GC. */ |
| tcache_bin_t tbins[1]; /* Dynamically sized. */ |
| /* |
| * The pointer stacks associated with tbins follow as a contiguous |
| * array. During tcache initialization, the avail pointer in each |
| * element of tbins is initialized to point to the proper offset within |
| * this array. |
| */ |
| }; |
| |
| /* Linkage for list of available (previously used) explicit tcache IDs. */ |
| struct tcaches_s { |
| union { |
| tcache_t *tcache; |
| tcaches_t *next; |
| }; |
| }; |
| |
| #endif /* JEMALLOC_INTERNAL_TCACHE_STRUCTS_H */ |