mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-05-18 21:19:31 +03:00
Reduce divsions in mi_heap_area_visit_blocks()
This commit is contained in:
parent
3ff9e900b9
commit
a5d76cc083
1 changed files with 13 additions and 1 deletions
14
src/heap.c
14
src/heap.c
|
@ -455,7 +455,19 @@ static bool mi_heap_area_visit_blocks(const mi_heap_area_ex_t* xarea, mi_block_v
|
|||
mi_assert_internal((uint8_t*)block >= pstart && (uint8_t*)block < (pstart + psize));
|
||||
size_t offset = (uint8_t*)block - pstart;
|
||||
mi_assert_internal(offset % page->block_size == 0);
|
||||
size_t blockidx = offset / page->block_size; // Todo: avoid division?
|
||||
size_t blockidx;
|
||||
size_t divident = page->block_size;
|
||||
blockidx = offset >> mi_ffs32(divident);
|
||||
divident >>= mi_ffs32(divident);
|
||||
switch (divident)
|
||||
{
|
||||
case 3: blockidx/=3;
|
||||
break;
|
||||
case 5: blockidx/=5;
|
||||
break;
|
||||
case 7: blockidx/=7;
|
||||
break;
|
||||
}
|
||||
mi_assert_internal( blockidx < MI_MAX_BLOCKS);
|
||||
size_t bitidx = (blockidx / sizeof(uintptr_t));
|
||||
size_t bit = blockidx - (bitidx * sizeof(uintptr_t));
|
||||
|
|
Loading…
Add table
Reference in a new issue