summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordaan <daan@effp.org>2022-11-01 16:27:50 -0700
committerdaan <daan@effp.org>2022-11-01 16:27:50 -0700
commit933713292cabf6890a5b73bad95e73e6f3249c4e (patch)
treeed28966b57d4b3863ea87e1e64d8deb3a4f616d4
parent9f36808a7f898d20cbabe3c360df9e5732d620cf (diff)
parente6bd41ba3ffc643c2921b094b017f382f4460220 (diff)
merge from dev
-rw-r--r--include/mimalloc.h7
-rw-r--r--src/arena.c9
2 files changed, 13 insertions, 3 deletions
diff --git a/include/mimalloc.h b/include/mimalloc.h
index 3a0c790..7ca819c 100644
--- a/include/mimalloc.h
+++ b/include/mimalloc.h
@@ -282,9 +282,10 @@ mi_decl_export void mi_debug_show_arenas(void) mi_attr_noexcept;
// Experimental: heaps associated with specific memory arena's
typedef int mi_arena_id_t;
-mi_decl_export int mi_reserve_huge_os_pages_at_ex(size_t pages, int numa_node, size_t timeout_msecs, bool exclusive, mi_arena_id_t* arena_id) mi_attr_noexcept;
-mi_decl_export int mi_reserve_os_memory_ex(size_t size, bool commit, bool allow_large, bool exclusive, mi_arena_id_t* arena_id) mi_attr_noexcept;
-mi_decl_export bool mi_manage_os_memory_ex(void* start, size_t size, bool is_committed, bool is_large, bool is_zero, int numa_node, bool exclusive, mi_arena_id_t* arena_id) mi_attr_noexcept;
+mi_decl_export void* mi_arena_area(mi_arena_id_t arena_id, size_t* size);
+mi_decl_export int mi_reserve_huge_os_pages_at_ex(size_t pages, int numa_node, size_t timeout_msecs, bool exclusive, mi_arena_id_t* arena_id) mi_attr_noexcept;
+mi_decl_export int mi_reserve_os_memory_ex(size_t size, bool commit, bool allow_large, bool exclusive, mi_arena_id_t* arena_id) mi_attr_noexcept;
+mi_decl_export bool mi_manage_os_memory_ex(void* start, size_t size, bool is_committed, bool is_large, bool is_zero, int numa_node, bool exclusive, mi_arena_id_t* arena_id) mi_attr_noexcept;
#if MI_MALLOC_VERSION >= 200
mi_decl_nodiscard mi_decl_export mi_heap_t* mi_heap_new_in_arena(mi_arena_id_t arena_id);
diff --git a/src/arena.c b/src/arena.c
index 8de8400..76ee955 100644
--- a/src/arena.c
+++ b/src/arena.c
@@ -281,6 +281,15 @@ void* _mi_arena_alloc(size_t size, bool* commit, bool* large, bool* is_pinned, b
return _mi_arena_alloc_aligned(size, MI_ARENA_BLOCK_SIZE, commit, large, is_pinned, is_zero, req_arena_id, memid, tld);
}
+void* mi_arena_area(mi_arena_id_t arena_id, size_t* size) {
+ if (size != NULL) *size = 0;
+ size_t arena_index = mi_arena_id_index(arena_id);
+ if (arena_index >= MI_MAX_ARENAS) return NULL;
+ mi_arena_t* arena = mi_atomic_load_ptr_relaxed(mi_arena_t, &mi_arenas[arena_index]);
+ if (arena == NULL) return NULL;
+ if (size != NULL) *size = arena->block_count * MI_ARENA_BLOCK_SIZE;
+ return arena->start;
+}
/* -----------------------------------------------------------
Arena free