diff --git a/include/mimalloc/bits.h b/include/mimalloc/bits.h index ca0b5905..ed4a7b44 100644 --- a/include/mimalloc/bits.h +++ b/include/mimalloc/bits.h @@ -107,6 +107,7 @@ typedef int32_t mi_ssize_t; // Define big endian if needed // #define MI_BIG_ENDIAN 1 +// maximum virtual address bits in a user-space pointer #if MI_DEFAULT_VIRTUAL_ADDRESS_BITS > 0 #define MI_MAX_VABITS MI_DEFAULT_VIRTUAL_ADDRESS_BITS #elif MI_ARCH_X64 @@ -117,6 +118,7 @@ typedef int32_t mi_ssize_t; #define MI_MAX_VABITS (32) #endif +// use a flat page-map (or a 2-level one) #ifndef MI_PAGE_MAP_FLAT #if MI_MAX_VABITS <= 40 #define MI_PAGE_MAP_FLAT 1 diff --git a/src/arena-meta.c b/src/arena-meta.c index 065a1331..fcfb680c 100644 --- a/src/arena-meta.c +++ b/src/arena-meta.c @@ -25,7 +25,7 @@ terms of the MIT license. A copy of the license can be found in the file #define MI_META_PAGE_SIZE MI_ARENA_SLICE_SIZE #define MI_META_PAGE_ALIGN MI_ARENA_SLICE_ALIGN -#define MI_META_BLOCK_SIZE (64) +#define MI_META_BLOCK_SIZE (128) // large enough such that META_MAX_SIZE > 4k (even on 32-bit) #define MI_META_BLOCK_ALIGN MI_META_BLOCK_SIZE #define MI_META_BLOCKS_PER_PAGE (MI_ARENA_SLICE_SIZE / MI_META_BLOCK_SIZE) // 1024 #define MI_META_MAX_SIZE (MI_BCHUNK_SIZE * MI_META_BLOCK_SIZE) diff --git a/src/page-map.c b/src/page-map.c index 5a25b839..190be6c0 100644 --- a/src/page-map.c +++ b/src/page-map.c @@ -147,7 +147,7 @@ void _mi_page_map_unregister_range(void* start, size_t size) { mi_page_t* _mi_safe_ptr_page(const void* p) { if mi_unlikely(p >= mi_page_map_max_address) return NULL; const uintptr_t idx = _mi_page_map_index(p); - if mi_unlikely(mi_page_map_commit == NULL || !mi_bitmap_is_set(mi_page_map_commit, idx/MI_PAGE_MAP_ENTRIES_PER_COMMIT_BIT)) return NULL; + if mi_unlikely(mi_page_map_commit != NULL && !mi_bitmap_is_set(mi_page_map_commit, idx/MI_PAGE_MAP_ENTRIES_PER_COMMIT_BIT)) return NULL; const uintptr_t ofs = _mi_page_map[idx]; if mi_unlikely(ofs == 0) return NULL; return (mi_page_t*)((((uintptr_t)p >> MI_ARENA_SLICE_SHIFT) - ofs + 1) << MI_ARENA_SLICE_SHIFT);