mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-05-05 06:59:32 +03:00
add arena.c into the static override object
This commit is contained in:
parent
a799a19136
commit
a407f35c64
2 changed files with 27 additions and 26 deletions
|
@ -82,13 +82,13 @@ static _Atomic(uintptr_t) mi_arena_count; // = 0
|
||||||
// Use `0` as a special id for direct OS allocated memory.
|
// Use `0` as a special id for direct OS allocated memory.
|
||||||
#define MI_MEMID_OS 0
|
#define MI_MEMID_OS 0
|
||||||
|
|
||||||
static size_t mi_memid_create(size_t arena_index, mi_bitmap_index_t bitmap_index) {
|
static size_t mi_arena_id_create(size_t arena_index, mi_bitmap_index_t bitmap_index) {
|
||||||
mi_assert_internal(arena_index < 0xFE);
|
mi_assert_internal(arena_index < 0xFE);
|
||||||
mi_assert_internal(((bitmap_index << 8) >> 8) == bitmap_index); // no overflow?
|
mi_assert_internal(((bitmap_index << 8) >> 8) == bitmap_index); // no overflow?
|
||||||
return ((bitmap_index << 8) | ((arena_index+1) & 0xFF));
|
return ((bitmap_index << 8) | ((arena_index+1) & 0xFF));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mi_memid_indices(size_t memid, size_t* arena_index, mi_bitmap_index_t* bitmap_index) {
|
static void mi_arena_id_indices(size_t memid, size_t* arena_index, mi_bitmap_index_t* bitmap_index) {
|
||||||
mi_assert_internal(memid != MI_MEMID_OS);
|
mi_assert_internal(memid != MI_MEMID_OS);
|
||||||
*arena_index = (memid & 0xFF) - 1;
|
*arena_index = (memid & 0xFF) - 1;
|
||||||
*bitmap_index = (memid >> 8);
|
*bitmap_index = (memid >> 8);
|
||||||
|
@ -128,7 +128,7 @@ static void* mi_arena_alloc_from(mi_arena_t* arena, size_t arena_index, size_t n
|
||||||
|
|
||||||
// claimed it! set the dirty bits (todo: no need for an atomic op here?)
|
// claimed it! set the dirty bits (todo: no need for an atomic op here?)
|
||||||
void* p = arena->start + (mi_bitmap_index_bit(bitmap_index)*MI_ARENA_BLOCK_SIZE);
|
void* p = arena->start + (mi_bitmap_index_bit(bitmap_index)*MI_ARENA_BLOCK_SIZE);
|
||||||
*memid = mi_memid_create(arena_index, bitmap_index);
|
*memid = mi_arena_id_create(arena_index, bitmap_index);
|
||||||
*is_zero = mi_bitmap_claim(arena->blocks_dirty, arena->field_count, needed_bcount, bitmap_index, NULL);
|
*is_zero = mi_bitmap_claim(arena->blocks_dirty, arena->field_count, needed_bcount, bitmap_index, NULL);
|
||||||
*large = arena->is_large;
|
*large = arena->is_large;
|
||||||
if (arena->is_committed) {
|
if (arena->is_committed) {
|
||||||
|
@ -224,7 +224,7 @@ void _mi_arena_free(void* p, size_t size, size_t memid, mi_stats_t* stats) {
|
||||||
// allocated in an arena
|
// allocated in an arena
|
||||||
size_t arena_idx;
|
size_t arena_idx;
|
||||||
size_t bitmap_idx;
|
size_t bitmap_idx;
|
||||||
mi_memid_indices(memid, &arena_idx, &bitmap_idx);
|
mi_arena_id_indices(memid, &arena_idx, &bitmap_idx);
|
||||||
mi_assert_internal(arena_idx < MI_MAX_ARENAS);
|
mi_assert_internal(arena_idx < MI_MAX_ARENAS);
|
||||||
mi_arena_t* arena = (mi_arena_t*)mi_atomic_read_ptr_relaxed(mi_atomic_cast(void*, &mi_arenas[arena_idx]));
|
mi_arena_t* arena = (mi_arena_t*)mi_atomic_read_ptr_relaxed(mi_atomic_cast(void*, &mi_arenas[arena_idx]));
|
||||||
mi_assert_internal(arena != NULL);
|
mi_assert_internal(arena != NULL);
|
||||||
|
|
|
@ -15,6 +15,7 @@ terms of the MIT license. A copy of the license can be found in the file
|
||||||
// functions (on Unix's).
|
// functions (on Unix's).
|
||||||
#include "stats.c"
|
#include "stats.c"
|
||||||
#include "os.c"
|
#include "os.c"
|
||||||
|
#include "arena.c"
|
||||||
#include "memory.c"
|
#include "memory.c"
|
||||||
#include "segment.c"
|
#include "segment.c"
|
||||||
#include "page.c"
|
#include "page.c"
|
||||||
|
|
Loading…
Add table
Reference in a new issue