1#ifndef JEMALLOC_INTERNAL_BIN_INFO_H
2#define JEMALLOC_INTERNAL_BIN_INFO_H
3
4#include "jemalloc/internal/bitmap.h"
5
6/*
7 * Read-only information associated with each element of arena_t's bins array
8 * is stored separately, partly to reduce memory usage (only one copy, rather
9 * than one per arena), but mainly to avoid false cacheline sharing.
10 *
11 * Each slab has the following layout:
12 *
13 * /--------------------\
14 * | region 0 |
15 * |--------------------|
16 * | region 1 |
17 * |--------------------|
18 * | ... |
19 * | ... |
20 * | ... |
21 * |--------------------|
22 * | region nregs-1 |
23 * \--------------------/
24 */
25typedef struct bin_info_s bin_info_t;
26struct bin_info_s {
27 /* Size of regions in a slab for this bin's size class. */
28 size_t reg_size;
29
30 /* Total size of a slab for this bin's size class. */
31 size_t slab_size;
32
33 /* Total number of regions in a slab for this bin's size class. */
34 uint32_t nregs;
35
36 /* Number of sharded bins in each arena for this size class. */
37 uint32_t n_shards;
38
39 /*
40 * Metadata used to manipulate bitmaps for slabs associated with this
41 * bin.
42 */
43 bitmap_info_t bitmap_info;
44};
45
46extern bin_info_t bin_infos[SC_NBINS];
47
48void bin_info_boot(sc_data_t *sc_data, unsigned bin_shard_sizes[SC_NBINS]);
49
50#endif /* JEMALLOC_INTERNAL_BIN_INFO_H */
51