diff options
author | Qi Wang <interwq@gwu.edu> | 2017-02-23 22:42:52 (GMT) |
---|---|---|
committer | Qi Wang <interwq@gmail.com> | 2017-02-24 17:41:29 (GMT) |
commit | c2323e13a5eec70f554e532336a912a9cd78317a (patch) | |
tree | 5ac234dfe75dc08d00152658db13e48908bffd88 /include/jemalloc | |
parent | de49674fbde4d124a0a7e7e97f5656e190980759 (diff) | |
download | jemalloc-c2323e13a5eec70f554e532336a912a9cd78317a.zip jemalloc-c2323e13a5eec70f554e532336a912a9cd78317a.tar.gz jemalloc-c2323e13a5eec70f554e532336a912a9cd78317a.tar.bz2 |
Get rid of witness in malloc_mutex_t when !(configured w/ debug).
We don't touch witness at all when config_debug == false. Let's only pay the
memory cost in malloc_mutex_s when needed. Note that when !config_debug, we keep
the field in a union so that we don't have to do #ifdefs in multiple places.
Diffstat (limited to 'include/jemalloc')
-rw-r--r-- | include/jemalloc/internal/mutex_structs.h | 30 | ||||
-rw-r--r-- | include/jemalloc/internal/mutex_types.h | 12 | ||||
-rw-r--r-- | include/jemalloc/internal/witness_types.h | 6 |
3 files changed, 34 insertions, 14 deletions
diff --git a/include/jemalloc/internal/mutex_structs.h b/include/jemalloc/internal/mutex_structs.h index 4a18a07..c34c1d4 100644 --- a/include/jemalloc/internal/mutex_structs.h +++ b/include/jemalloc/internal/mutex_structs.h @@ -2,23 +2,39 @@ #define JEMALLOC_INTERNAL_MUTEX_STRUCTS_H struct malloc_mutex_s { + union { + struct { #ifdef _WIN32 # if _WIN32_WINNT >= 0x0600 - SRWLOCK lock; + SRWLOCK lock; # else - CRITICAL_SECTION lock; + CRITICAL_SECTION lock; # endif #elif (defined(JEMALLOC_OS_UNFAIR_LOCK)) - os_unfair_lock lock; + os_unfair_lock lock; #elif (defined(JEMALLOC_OSSPIN)) - OSSpinLock lock; + OSSpinLock lock; #elif (defined(JEMALLOC_MUTEX_INIT_CB)) - pthread_mutex_t lock; - malloc_mutex_t *postponed_next; + pthread_mutex_t lock; + malloc_mutex_t *postponed_next; #else - pthread_mutex_t lock; + pthread_mutex_t lock; #endif + }; + /* + * We only touch witness when configured w/ debug. However we + * keep the field in a union when !debug so that we don't have + * to pollute the code base with #ifdefs, while avoid paying the + * memory cost. + */ +#if !defined(JEMALLOC_DEBUG) + witness_t witness; +#endif + }; + +#if defined(JEMALLOC_DEBUG) witness_t witness; +#endif }; #endif /* JEMALLOC_INTERNAL_MUTEX_STRUCTS_H */ diff --git a/include/jemalloc/internal/mutex_types.h b/include/jemalloc/internal/mutex_types.h index 8c9f249..b7e3a7a 100644 --- a/include/jemalloc/internal/mutex_types.h +++ b/include/jemalloc/internal/mutex_types.h @@ -7,25 +7,25 @@ typedef struct malloc_mutex_s malloc_mutex_t; # define MALLOC_MUTEX_INITIALIZER #elif (defined(JEMALLOC_OS_UNFAIR_LOCK)) # define MALLOC_MUTEX_INITIALIZER \ - {OS_UNFAIR_LOCK_INIT, WITNESS_INITIALIZER("mutex", WITNESS_RANK_OMIT)} + {{{OS_UNFAIR_LOCK_INIT}}, WITNESS_INITIALIZER("mutex", WITNESS_RANK_OMIT)} #elif (defined(JEMALLOC_OSSPIN)) # define MALLOC_MUTEX_INITIALIZER \ - {0, WITNESS_INITIALIZER("mutex", WITNESS_RANK_OMIT)} + {{{0}}, WITNESS_INITIALIZER("mutex", WITNESS_RANK_OMIT)} #elif (defined(JEMALLOC_MUTEX_INIT_CB)) # define MALLOC_MUTEX_INITIALIZER \ - {PTHREAD_MUTEX_INITIALIZER, NULL, \ - WITNESS_INITIALIZER("mutex", WITNESS_RANK_OMIT)} + {{{PTHREAD_MUTEX_INITIALIZER, NULL}}, \ + WITNESS_INITIALIZER("mutex", WITNESS_RANK_OMIT)} #else # if (defined(JEMALLOC_HAVE_PTHREAD_MUTEX_ADAPTIVE_NP) && \ defined(PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP)) # define MALLOC_MUTEX_TYPE PTHREAD_MUTEX_ADAPTIVE_NP # define MALLOC_MUTEX_INITIALIZER \ - {PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP, \ + {{{PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP}}, \ WITNESS_INITIALIZER("mutex", WITNESS_RANK_OMIT)} # else # define MALLOC_MUTEX_TYPE PTHREAD_MUTEX_DEFAULT # define MALLOC_MUTEX_INITIALIZER \ - {PTHREAD_MUTEX_INITIALIZER, \ + {{{PTHREAD_MUTEX_INITIALIZER}}, \ WITNESS_INITIALIZER("mutex", WITNESS_RANK_OMIT)} # endif #endif diff --git a/include/jemalloc/internal/witness_types.h b/include/jemalloc/internal/witness_types.h index 0678b08..3efaad7 100644 --- a/include/jemalloc/internal/witness_types.h +++ b/include/jemalloc/internal/witness_types.h @@ -55,6 +55,10 @@ typedef int witness_comp_t (const witness_t *, void *, const witness_t *, #define WITNESS_RANK_PROF_NEXT_THR_UID WITNESS_RANK_LEAF #define WITNESS_RANK_PROF_THREAD_ACTIVE_INIT WITNESS_RANK_LEAF -#define WITNESS_INITIALIZER(name, rank) {name, rank, NULL, NULL, {NULL, NULL}} +#if defined(JEMALLOC_DEBUG) +# define WITNESS_INITIALIZER(name, rank) {name, rank, NULL, NULL, {NULL, NULL}} +#else +# define WITNESS_INITIALIZER(name, rank) +#endif #endif /* JEMALLOC_INTERNAL_WITNESS_TYPES_H */ |