diff options
author | Qinfan Wu <wqfish@fb.com> | 2014-08-29 13:34:40 -0700 |
---|---|---|
committer | Jason Evans <je@fb.com> | 2014-09-04 22:22:52 -0700 |
commit | ff6a31d3b92b7c63446ce645341d2bbd77b67dc6 (patch) | |
tree | 93adb41dc69278a6d98a26ed953d30c479ee3ea5 /src/tcache.c | |
parent | f34f6037e8d9836f7cddc02ad349dc72964bbcc7 (diff) | |
download | jemalloc-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.c | 11 |
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; |