1 | #ifndef JEMALLOC_INTERNAL_INCLUDES_H |
2 | #define JEMALLOC_INTERNAL_INCLUDES_H |
3 | |
4 | /* |
5 | * jemalloc can conceptually be broken into components (arena, tcache, etc.), |
6 | * but there are circular dependencies that cannot be broken without |
7 | * substantial performance degradation. |
8 | * |
9 | * Historically, we dealt with this by each header into four sections (types, |
10 | * structs, externs, and inlines), and included each header file multiple times |
11 | * in this file, picking out the portion we want on each pass using the |
12 | * following #defines: |
13 | * JEMALLOC_H_TYPES : Preprocessor-defined constants and psuedo-opaque data |
14 | * types. |
15 | * JEMALLOC_H_STRUCTS : Data structures. |
16 | * JEMALLOC_H_EXTERNS : Extern data declarations and function prototypes. |
17 | * JEMALLOC_H_INLINES : Inline functions. |
18 | * |
19 | * We're moving toward a world in which the dependencies are explicit; each file |
20 | * will #include the headers it depends on (rather than relying on them being |
21 | * implicitly available via this file including every header file in the |
22 | * project). |
23 | * |
24 | * We're now in an intermediate state: we've broken up the header files to avoid |
25 | * having to include each one multiple times, but have not yet moved the |
26 | * dependency information into the header files (i.e. we still rely on the |
27 | * ordering in this file to ensure all a header's dependencies are available in |
28 | * its translation unit). Each component is now broken up into multiple header |
29 | * files, corresponding to the sections above (e.g. instead of "foo.h", we now |
30 | * have "foo_types.h", "foo_structs.h", "foo_externs.h", "foo_inlines.h"). |
31 | * |
32 | * Those files which have been converted to explicitly include their |
33 | * inter-component dependencies are now in the initial HERMETIC HEADERS |
34 | * section. All headers may still rely on jemalloc_preamble.h (which, by fiat, |
35 | * must be included first in every translation unit) for system headers and |
36 | * global jemalloc definitions, however. |
37 | */ |
38 | |
39 | /******************************************************************************/ |
40 | /* TYPES */ |
41 | /******************************************************************************/ |
42 | |
43 | #include "jemalloc/internal/extent_types.h" |
44 | #include "jemalloc/internal/base_types.h" |
45 | #include "jemalloc/internal/arena_types.h" |
46 | #include "jemalloc/internal/tcache_types.h" |
47 | #include "jemalloc/internal/prof_types.h" |
48 | |
49 | /******************************************************************************/ |
50 | /* STRUCTS */ |
51 | /******************************************************************************/ |
52 | |
53 | #include "jemalloc/internal/arena_structs_a.h" |
54 | #include "jemalloc/internal/extent_structs.h" |
55 | #include "jemalloc/internal/base_structs.h" |
56 | #include "jemalloc/internal/prof_structs.h" |
57 | #include "jemalloc/internal/arena_structs_b.h" |
58 | #include "jemalloc/internal/tcache_structs.h" |
59 | #include "jemalloc/internal/background_thread_structs.h" |
60 | |
61 | /******************************************************************************/ |
62 | /* EXTERNS */ |
63 | /******************************************************************************/ |
64 | |
65 | #include "jemalloc/internal/jemalloc_internal_externs.h" |
66 | #include "jemalloc/internal/extent_externs.h" |
67 | #include "jemalloc/internal/base_externs.h" |
68 | #include "jemalloc/internal/arena_externs.h" |
69 | #include "jemalloc/internal/large_externs.h" |
70 | #include "jemalloc/internal/tcache_externs.h" |
71 | #include "jemalloc/internal/prof_externs.h" |
72 | #include "jemalloc/internal/background_thread_externs.h" |
73 | |
74 | /******************************************************************************/ |
75 | /* INLINES */ |
76 | /******************************************************************************/ |
77 | |
78 | #include "jemalloc/internal/jemalloc_internal_inlines_a.h" |
79 | #include "jemalloc/internal/base_inlines.h" |
80 | /* |
81 | * Include portions of arena code interleaved with tcache code in order to |
82 | * resolve circular dependencies. |
83 | */ |
84 | #include "jemalloc/internal/prof_inlines_a.h" |
85 | #include "jemalloc/internal/arena_inlines_a.h" |
86 | #include "jemalloc/internal/extent_inlines.h" |
87 | #include "jemalloc/internal/jemalloc_internal_inlines_b.h" |
88 | #include "jemalloc/internal/tcache_inlines.h" |
89 | #include "jemalloc/internal/arena_inlines_b.h" |
90 | #include "jemalloc/internal/jemalloc_internal_inlines_c.h" |
91 | #include "jemalloc/internal/prof_inlines_b.h" |
92 | #include "jemalloc/internal/background_thread_inlines.h" |
93 | |
94 | #endif /* JEMALLOC_INTERNAL_INCLUDES_H */ |
95 | |