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