Home | History | Annotate | Download | only in internal
      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