8d0e04d42f
Recent huge allocation refactoring associates huge allocations with arenas, but it remains necessary to quickly look up huge allocation metadata during reallocation/deallocation. A global radix tree remains a good solution to this problem, but locking would have become the primary bottleneck after (upcoming) migration of chunk management from global to per arena data structures. This lock-free implementation uses double-checked reads to traverse the tree, so that in the steady state, each read or write requires only a single atomic operation. This implementation also assures that no more than two tree levels actually exist, through a combination of careful virtual memory allocation which makes large sparse nodes cheap, and skipping the root node on x64 (possible because the top 16 bits are all 0 in practice). |
||
---|---|---|
.. | ||
atomic.c | ||
bitmap.c | ||
ckh.c | ||
hash.c | ||
junk_alloc.c | ||
junk_free.c | ||
junk.c | ||
lg_chunk.c | ||
mallctl.c | ||
math.c | ||
mq.c | ||
mtx.c | ||
prof_accum.c | ||
prof_active.c | ||
prof_gdump.c | ||
prof_idump.c | ||
prof_reset.c | ||
prof_thread_name.c | ||
ql.c | ||
qr.c | ||
quarantine.c | ||
rb.c | ||
rtree.c | ||
SFMT.c | ||
stats.c | ||
tsd.c | ||
util.c | ||
zero.c |