mirror of
https://github.com/jemalloc/jemalloc.git
synced 2026-04-17 16:11:42 +03:00
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.c | ||
| junk_alloc.c | ||
| junk_free.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 | ||