aboutsummaryrefslogtreecommitdiff
path: root/src/tcache.c
diff options
context:
space:
mode:
authorQinfan Wu <wqfish@fb.com>2014-08-29 13:34:40 -0700
committerJason Evans <je@fb.com>2014-09-04 22:22:52 -0700
commitff6a31d3b92b7c63446ce645341d2bbd77b67dc6 (patch)
tree93adb41dc69278a6d98a26ed953d30c479ee3ea5 /src/tcache.c
parentf34f6037e8d9836f7cddc02ad349dc72964bbcc7 (diff)
downloadjemalloc-ff6a31d3b92b7c63446ce645341d2bbd77b67dc6.tar.gz
Refactor chunk map.
Break the chunk map into two separate arrays, in order to improve cache locality. This is related to issue #23.
Diffstat (limited to 'src/tcache.c')
-rw-r--r--src/tcache.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/tcache.c b/src/tcache.c
index 4fbc94c..f86a46e 100644
--- a/src/tcache.c
+++ b/src/tcache.c
@@ -118,10 +118,10 @@ tcache_bin_flush_small(tcache_bin_t *tbin, size_t binind, unsigned rem,
if (chunk->arena == arena) {
size_t pageind = ((uintptr_t)ptr -
(uintptr_t)chunk) >> LG_PAGE;
- arena_chunk_map_t *mapelm =
- arena_mapp_get(chunk, pageind);
+ arena_chunk_map_bits_t *bitselm =
+ arena_bitselm_get(chunk, pageind);
arena_dalloc_bin_locked(arena, chunk, ptr,
- mapelm);
+ bitselm);
} else {
/*
* This object was allocated via a different
@@ -393,9 +393,10 @@ tcache_destroy(tcache_t *tcache)
arena_t *arena = chunk->arena;
size_t pageind = ((uintptr_t)tcache - (uintptr_t)chunk) >>
LG_PAGE;
- arena_chunk_map_t *mapelm = arena_mapp_get(chunk, pageind);
+ arena_chunk_map_bits_t *bitselm = arena_bitselm_get(chunk,
+ pageind);
- arena_dalloc_bin(arena, chunk, tcache, pageind, mapelm);
+ arena_dalloc_bin(arena, chunk, tcache, pageind, bitselm);
} else if (tcache_size <= tcache_maxclass) {
arena_chunk_t *chunk = CHUNK_ADDR2BASE(tcache);
arena_t *arena = chunk->arena;