add slot randomization to configuration header
parent
bed303a76f
commit
ba3a8b0058
1
config.h
1
config.h
|
@ -3,5 +3,6 @@
|
||||||
|
|
||||||
#define GUARD_SLABS true
|
#define GUARD_SLABS true
|
||||||
#define WRITE_AFTER_FREE_CHECK true
|
#define WRITE_AFTER_FREE_CHECK true
|
||||||
|
#define SLOT_RANDOMIZE true
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
13
malloc.c
13
malloc.c
|
@ -204,13 +204,16 @@ static size_t get_free_slot(struct random_state *rng, size_t slots, struct slab_
|
||||||
fatal_error("no zero bits");
|
fatal_error("no zero bits");
|
||||||
}
|
}
|
||||||
|
|
||||||
// randomize start location for linear search (uniform random choice is too slow)
|
if (SLOT_RANDOMIZE) {
|
||||||
uint64_t random_split = ~(~0UL << get_random_u16_uniform(rng, slots));
|
// randomize start location for linear search (uniform random choice is too slow)
|
||||||
|
uint64_t random_split = ~(~0UL << get_random_u16_uniform(rng, slots));
|
||||||
|
|
||||||
size_t slot = ffzl(masked | random_split);
|
size_t slot = ffzl(masked | random_split);
|
||||||
if (slot) {
|
if (slot) {
|
||||||
return slot - 1;
|
return slot - 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ffzl(masked) - 1;
|
return ffzl(masked) - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue