mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-05-11 09:49:31 +03:00
comments
This commit is contained in:
parent
d2f670e6e5
commit
037cb167f8
2 changed files with 17 additions and 14 deletions
|
@ -100,7 +100,7 @@ terms of the MIT license. A copy of the license can be found in the file
|
||||||
|
|
||||||
// Sizes are for 64-bit
|
// Sizes are for 64-bit
|
||||||
#ifndef MI_ARENA_SLICE_SHIFT
|
#ifndef MI_ARENA_SLICE_SHIFT
|
||||||
#ifdef MI_SMALL_PAGE_SHIFT // compatibility
|
#ifdef MI_SMALL_PAGE_SHIFT // backward compatibility
|
||||||
#define MI_ARENA_SLICE_SHIFT MI_SMALL_PAGE_SHIFT
|
#define MI_ARENA_SLICE_SHIFT MI_SMALL_PAGE_SHIFT
|
||||||
#else
|
#else
|
||||||
#define MI_ARENA_SLICE_SHIFT (13 + MI_SIZE_SHIFT) // 64 KiB (32 KiB on 32-bit)
|
#define MI_ARENA_SLICE_SHIFT (13 + MI_SIZE_SHIFT) // 64 KiB (32 KiB on 32-bit)
|
||||||
|
|
|
@ -1433,6 +1433,9 @@ typedef bool (mi_bchunk_try_find_and_clear_fun_t)(mi_bchunk_t* chunk, size_t n,
|
||||||
|
|
||||||
// Go through the bbitmap and for every sequence of `n` set bits, call the visitor function.
|
// Go through the bbitmap and for every sequence of `n` set bits, call the visitor function.
|
||||||
// If it returns `true` stop the search.
|
// If it returns `true` stop the search.
|
||||||
|
//
|
||||||
|
// This is used for finding free blocks and it is important to be efficient (with 2-level bitscan)
|
||||||
|
// but also reduce fragmentation (through size bins).
|
||||||
static inline bool mi_bbitmap_try_find_and_clear_generic(mi_bbitmap_t* bbitmap, size_t tseq, size_t n, size_t* pidx, mi_bchunk_try_find_and_clear_fun_t* on_find)
|
static inline bool mi_bbitmap_try_find_and_clear_generic(mi_bbitmap_t* bbitmap, size_t tseq, size_t n, size_t* pidx, mi_bchunk_try_find_and_clear_fun_t* on_find)
|
||||||
{
|
{
|
||||||
// we space out threads to reduce contention
|
// we space out threads to reduce contention
|
||||||
|
@ -1466,7 +1469,7 @@ static inline bool mi_bbitmap_try_find_and_clear_generic(mi_bbitmap_t* bbitmap,
|
||||||
const size_t chunk_idx = cmap_idx*MI_BFIELD_BITS + eidx;
|
const size_t chunk_idx = cmap_idx*MI_BFIELD_BITS + eidx;
|
||||||
mi_assert_internal(chunk_idx < mi_bbitmap_chunk_count(bbitmap));
|
mi_assert_internal(chunk_idx < mi_bbitmap_chunk_count(bbitmap));
|
||||||
// only in the current size class!
|
// only in the current size class!
|
||||||
const mi_bbin_t chunk_bin = (mi_bbin_t)mi_atomic_load_acquire(&bbitmap->chunk_bins[chunk_idx]);
|
const mi_bbin_t chunk_bin = (mi_bbin_t)mi_atomic_load_relaxed(&bbitmap->chunk_bins[chunk_idx]);
|
||||||
if // (bin >= chunk_bin) {
|
if // (bin >= chunk_bin) {
|
||||||
((mi_bbin_t)bin == chunk_bin || (bin <= MI_BBIN_SMALL && chunk_bin <= MI_BBIN_SMALL)) {
|
((mi_bbin_t)bin == chunk_bin || (bin <= MI_BBIN_SMALL && chunk_bin <= MI_BBIN_SMALL)) {
|
||||||
mi_bchunk_t* chunk = &bbitmap->chunks[chunk_idx];
|
mi_bchunk_t* chunk = &bbitmap->chunks[chunk_idx];
|
||||||
|
|
Loading…
Add table
Reference in a new issue