diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3adcfdca..70db80b7 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -38,20 +38,20 @@ include(GNUInstallDirs)
include("cmake/mimalloc-config-version.cmake")
set(mi_sources
- src/stats.c
- src/random.c
- src/os.c
- src/bitmap.c
- src/arena.c
- src/segment-cache.c
- src/segment.c
- src/page.c
src/alloc.c
src/alloc-aligned.c
src/alloc-posix.c
+ src/arena.c
+ src/bitmap.c
src/heap.c
- src/options.c
src/init.c
+ src/options.c
+ src/os.c
+ src/page.c
+ src/random.c
+ src/segment.c
+ src/segment-cache.c
+ src/stats.c
src/prim/prim.c)
set(mi_cflags "")
@@ -92,7 +92,7 @@ if(MI_OVERRIDE)
if(MI_OSX_ZONE)
# use zone's on macOS
message(STATUS " Use malloc zone to override malloc (MI_OSX_ZONE=ON)")
- list(APPEND mi_sources src/alloc-override-osx.c)
+ list(APPEND mi_sources src/prim/osx/alloc-override-zone.c)
list(APPEND mi_defines MI_OSX_ZONE=1)
if (NOT MI_OSX_INTERPOSE)
message(STATUS " WARNING: zone overriding usually also needs interpose (use -DMI_OSX_INTERPOSE=ON)")
diff --git a/cmake/mimalloc-config-version.cmake b/cmake/mimalloc-config-version.cmake
index 64d71053..842c733e 100644
--- a/cmake/mimalloc-config-version.cmake
+++ b/cmake/mimalloc-config-version.cmake
@@ -1,6 +1,6 @@
set(mi_version_major 2)
-set(mi_version_minor 0)
-set(mi_version_patch 9)
+set(mi_version_minor 1)
+set(mi_version_patch 0)
set(mi_version ${mi_version_major}.${mi_version_minor})
set(PACKAGE_VERSION ${mi_version})
diff --git a/ide/vs2022/mimalloc-override.vcxproj b/ide/vs2022/mimalloc-override.vcxproj
index 03623973..9cd7a6c5 100644
--- a/ide/vs2022/mimalloc-override.vcxproj
+++ b/ide/vs2022/mimalloc-override.vcxproj
@@ -209,15 +209,16 @@
-
-
-
-
+
+
+
+
+
diff --git a/ide/vs2022/mimalloc.vcxproj b/ide/vs2022/mimalloc.vcxproj
index 516bf8dc..d71360df 100644
--- a/ide/vs2022/mimalloc.vcxproj
+++ b/ide/vs2022/mimalloc.vcxproj
@@ -241,14 +241,15 @@
-
-
-
-
+
+
+
+
+
diff --git a/include/mimalloc.h b/include/mimalloc.h
index f4a43f6d..1372cb3f 100644
--- a/include/mimalloc.h
+++ b/include/mimalloc.h
@@ -8,7 +8,7 @@ terms of the MIT license. A copy of the license can be found in the file
#ifndef MIMALLOC_H
#define MIMALLOC_H
-#define MI_MALLOC_VERSION 209 // major + 2 digits minor
+#define MI_MALLOC_VERSION 210 // major + 2 digits minor
// ------------------------------------------------------
// Compiler specific attributes
diff --git a/include/mimalloc-atomic.h b/include/mimalloc/atomic.h
similarity index 100%
rename from include/mimalloc-atomic.h
rename to include/mimalloc/atomic.h
diff --git a/include/mimalloc-internal.h b/include/mimalloc/internal.h
similarity index 99%
rename from include/mimalloc-internal.h
rename to include/mimalloc/internal.h
index 3851187f..9c2f4334 100644
--- a/include/mimalloc-internal.h
+++ b/include/mimalloc/internal.h
@@ -8,8 +8,14 @@ terms of the MIT license. A copy of the license can be found in the file
#ifndef MIMALLOC_INTERNAL_H
#define MIMALLOC_INTERNAL_H
-#include "mimalloc-types.h"
-#include "mimalloc-track.h"
+
+// --------------------------------------------------------------------------
+// This file contains the interal API's of mimalloc and various utility
+// functions and macros.
+// --------------------------------------------------------------------------
+
+#include "mimalloc/types.h"
+#include "mimalloc/track.h"
#if (MI_DEBUG>0)
#define mi_trace_message(...) _mi_trace_message(__VA_ARGS__)
@@ -44,6 +50,7 @@ terms of the MIT license. A copy of the license can be found in the file
#define mi_decl_externc
#endif
+// pthreads
#if !defined(_WIN32) && !defined(__wasi__)
#define MI_USE_PTHREADS
#include
diff --git a/src/prim/prim.h b/include/mimalloc/prim.h
similarity index 97%
rename from src/prim/prim.h
rename to include/mimalloc/prim.h
index 1a4fb5d8..97d8b45d 100644
--- a/src/prim/prim.h
+++ b/include/mimalloc/prim.h
@@ -8,10 +8,17 @@ terms of the MIT license. A copy of the license can be found in the file
#ifndef MIMALLOC_PRIM_H
#define MIMALLOC_PRIM_H
+
+// --------------------------------------------------------------------------
+// This file specifies the primitive portability API.
+// Each OS/host needs to implement these primitives, see `src/prim`
+// for implementations on Window, macOS, WASI, and Linux/Unix.
+//
// note: on all primitive functions, we always get:
// addr != NULL and page aligned
// size > 0 and page aligned
// return value is an error code an int where 0 is success.
+// --------------------------------------------------------------------------
// OS memory configuration
typedef struct mi_os_mem_config_s {
diff --git a/include/mimalloc-track.h b/include/mimalloc/track.h
similarity index 100%
rename from include/mimalloc-track.h
rename to include/mimalloc/track.h
diff --git a/include/mimalloc-types.h b/include/mimalloc/types.h
similarity index 97%
rename from include/mimalloc-types.h
rename to include/mimalloc/types.h
index 54a5044c..f2bd649d 100644
--- a/include/mimalloc-types.h
+++ b/include/mimalloc/types.h
@@ -8,9 +8,20 @@ terms of the MIT license. A copy of the license can be found in the file
#ifndef MIMALLOC_TYPES_H
#define MIMALLOC_TYPES_H
+// --------------------------------------------------------------------------
+// This file contains the main type definitions for mimalloc:
+// mi_heap_t : all data for a thread-local heap, contains
+// lists of all managed heap pages.
+// mi_segment_t : a larger chunk of memory (32GiB) from where pages
+// are allocated.
+// mi_page_t : a mimalloc page (usually 64KiB or 512KiB) from
+// where objects are allocated.
+// --------------------------------------------------------------------------
+
+
#include // ptrdiff_t
#include // uintptr_t, uint16_t, etc
-#include "mimalloc-atomic.h" // _Atomic
+#include "mimalloc/atomic.h" // _Atomic
#ifdef _MSC_VER
#pragma warning(disable:4214) // bitfield is not int
diff --git a/src/alloc-aligned.c b/src/alloc-aligned.c
index a3c502d2..e79a2220 100644
--- a/src/alloc-aligned.c
+++ b/src/alloc-aligned.c
@@ -6,8 +6,8 @@ terms of the MIT license. A copy of the license can be found in the file
-----------------------------------------------------------------------------*/
#include "mimalloc.h"
-#include "mimalloc-internal.h"
-#include "prim/prim.h" // mi_prim_get_default_heap
+#include "mimalloc/internal.h"
+#include "mimalloc/prim.h" // mi_prim_get_default_heap
#include // memset
diff --git a/src/alloc-posix.c b/src/alloc-posix.c
index f0cfe629..b6f09d1a 100644
--- a/src/alloc-posix.c
+++ b/src/alloc-posix.c
@@ -10,7 +10,7 @@ terms of the MIT license. A copy of the license can be found in the file
// for convenience and used when overriding these functions.
// ------------------------------------------------------------------------
#include "mimalloc.h"
-#include "mimalloc-internal.h"
+#include "mimalloc/internal.h"
// ------------------------------------------------------
// Posix & Unix functions definitions
diff --git a/src/alloc.c b/src/alloc.c
index a200caed..1c6a2f69 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -9,9 +9,9 @@ terms of the MIT license. A copy of the license can be found in the file
#endif
#include "mimalloc.h"
-#include "mimalloc-internal.h"
-#include "mimalloc-atomic.h"
-#include "prim/prim.h" // _mi_prim_thread_id()
+#include "mimalloc/internal.h"
+#include "mimalloc/atomic.h"
+#include "mimalloc/prim.h" // _mi_prim_thread_id()
#include // memset, strlen (for mi_strdup)
#include // malloc, abort
@@ -40,7 +40,7 @@ extern inline void* _mi_page_malloc(mi_heap_t* heap, mi_page_t* page, size_t siz
// allow use of the block internally
// note: when tracking we need to avoid ever touching the MI_PADDING since
- // that is tracked by valgrind etc. as non-accessible (through the red-zone, see `mimalloc-track.h`)
+ // that is tracked by valgrind etc. as non-accessible (through the red-zone, see `mimalloc/track.h`)
mi_track_mem_undefined(block, mi_page_usable_block_size(page));
// zero the block? note: we need to zero the full block size (issue #63)
diff --git a/src/arena.c b/src/arena.c
index 80dd4786..44f68ec5 100644
--- a/src/arena.c
+++ b/src/arena.c
@@ -21,8 +21,8 @@ which is sometimes needed for embedded devices or shared memory for example.
The arena allocation needs to be thread safe and we use an atomic bitmap to allocate.
-----------------------------------------------------------------------------*/
#include "mimalloc.h"
-#include "mimalloc-internal.h"
-#include "mimalloc-atomic.h"
+#include "mimalloc/internal.h"
+#include "mimalloc/atomic.h"
#include // memset
#include // ENOMEM
diff --git a/src/bitmap.c b/src/bitmap.c
index 4ea9f4af..6fe745ac 100644
--- a/src/bitmap.c
+++ b/src/bitmap.c
@@ -18,7 +18,7 @@ between the fields. (This is used in arena allocation)
---------------------------------------------------------------------------- */
#include "mimalloc.h"
-#include "mimalloc-internal.h"
+#include "mimalloc/internal.h"
#include "bitmap.h"
/* -----------------------------------------------------------
diff --git a/src/heap.c b/src/heap.c
index a7b28f0e..18141500 100644
--- a/src/heap.c
+++ b/src/heap.c
@@ -6,10 +6,9 @@ terms of the MIT license. A copy of the license can be found in the file
-----------------------------------------------------------------------------*/
#include "mimalloc.h"
-#include "mimalloc-internal.h"
-#include "mimalloc-atomic.h"
-#include "mimalloc-track.h"
-#include "prim/prim.h" // mi_prim_get_default_heap
+#include "mimalloc/internal.h"
+#include "mimalloc/atomic.h"
+#include "mimalloc/prim.h" // mi_prim_get_default_heap
#include // memset, memcpy
diff --git a/src/init.c b/src/init.c
index 892f1e10..f82aa534 100644
--- a/src/init.c
+++ b/src/init.c
@@ -5,8 +5,8 @@ terms of the MIT license. A copy of the license can be found in the file
"LICENSE" at the root of this distribution.
-----------------------------------------------------------------------------*/
#include "mimalloc.h"
-#include "mimalloc-internal.h"
-#include "prim/prim.h"
+#include "mimalloc/internal.h"
+#include "mimalloc/prim.h"
#include // memcpy, memset
#include // atexit
diff --git a/src/options.c b/src/options.c
index 8f15d647..fbfb82a7 100644
--- a/src/options.c
+++ b/src/options.c
@@ -5,9 +5,9 @@ terms of the MIT license. A copy of the license can be found in the file
"LICENSE" at the root of this distribution.
-----------------------------------------------------------------------------*/
#include "mimalloc.h"
-#include "mimalloc-internal.h"
-#include "mimalloc-atomic.h"
-#include "prim/prim.h" // mi_prim_out_stderr
+#include "mimalloc/internal.h"
+#include "mimalloc/atomic.h"
+#include "mimalloc/prim.h" // mi_prim_out_stderr
#include // FILE
#include // abort
diff --git a/src/os.c b/src/os.c
index 5263af42..cd460f68 100644
--- a/src/os.c
+++ b/src/os.c
@@ -5,9 +5,9 @@ terms of the MIT license. A copy of the license can be found in the file
"LICENSE" at the root of this distribution.
-----------------------------------------------------------------------------*/
#include "mimalloc.h"
-#include "mimalloc-internal.h"
-#include "mimalloc-atomic.h"
-#include "prim/prim.h"
+#include "mimalloc/internal.h"
+#include "mimalloc/atomic.h"
+#include "mimalloc/prim.h"
/* -----------------------------------------------------------
diff --git a/src/page.c b/src/page.c
index 90fc359e..c2eaf7ef 100644
--- a/src/page.c
+++ b/src/page.c
@@ -12,8 +12,8 @@ terms of the MIT license. A copy of the license can be found in the file
----------------------------------------------------------- */
#include "mimalloc.h"
-#include "mimalloc-internal.h"
-#include "mimalloc-atomic.h"
+#include "mimalloc/internal.h"
+#include "mimalloc/atomic.h"
/* -----------------------------------------------------------
Definition of page queues for each block size
diff --git a/src/alloc-override-osx.c b/src/prim/osx/alloc-override-zone.c
similarity index 99%
rename from src/alloc-override-osx.c
rename to src/prim/osx/alloc-override-zone.c
index a2819a8b..a517ddea 100644
--- a/src/alloc-override-osx.c
+++ b/src/prim/osx/alloc-override-zone.c
@@ -6,7 +6,7 @@ terms of the MIT license. A copy of the license can be found in the file
-----------------------------------------------------------------------------*/
#include "mimalloc.h"
-#include "mimalloc-internal.h"
+#include "mimalloc/internal.h"
#if defined(MI_MALLOC_OVERRIDE)
diff --git a/src/prim/osx/prim.c b/src/prim/osx/prim.c
new file mode 100644
index 00000000..8a2f4e8a
--- /dev/null
+++ b/src/prim/osx/prim.c
@@ -0,0 +1,9 @@
+/* ----------------------------------------------------------------------------
+Copyright (c) 2018-2023, Microsoft Research, Daan Leijen
+This is free software; you can redistribute it and/or modify it under the
+terms of the MIT license. A copy of the license can be found in the file
+"LICENSE" at the root of this distribution.
+-----------------------------------------------------------------------------*/
+
+// We use the unix/prim.c with the mmap API on macOSX
+#include "../unix/prim.c"
diff --git a/src/prim/prim.c b/src/prim/prim.c
index 109ab8e8..9a597d8e 100644
--- a/src/prim/prim.c
+++ b/src/prim/prim.c
@@ -10,9 +10,15 @@ terms of the MIT license. A copy of the license can be found in the file
#if defined(_WIN32)
#include "windows/prim.c" // VirtualAlloc (Windows)
+
+#elif defined(__APPLE__)
+#include "osx/prim.c" // macOSX (actually defers to mmap in unix/prim.c)
+
#elif defined(__wasi__)
#define MI_USE_SBRK
#include "wasi/prim.c" // memory-grow or sbrk (Wasm)
+
#else
#include "unix/prim.c" // mmap() (Linux, macOSX, BSD, Illumnos, Haiku, DragonFly, etc.)
+
#endif
diff --git a/src/prim/unix/prim.c b/src/prim/unix/prim.c
index 5a3ca5ab..0ac69f1a 100644
--- a/src/prim/unix/prim.c
+++ b/src/prim/unix/prim.c
@@ -21,9 +21,9 @@ terms of the MIT license. A copy of the license can be found in the file
#endif
#include "mimalloc.h"
-#include "mimalloc-internal.h"
-#include "mimalloc-atomic.h"
-#include "../prim.h"
+#include "mimalloc/internal.h"
+#include "mimalloc/atomic.h"
+#include "mimalloc/prim.h"
#include // mmap
#include // sysconf
diff --git a/src/prim/wasi/prim.c b/src/prim/wasi/prim.c
index f995304f..cb3ce1a7 100644
--- a/src/prim/wasi/prim.c
+++ b/src/prim/wasi/prim.c
@@ -8,9 +8,9 @@ terms of the MIT license. A copy of the license can be found in the file
// This file is included in `src/prim/prim.c`
#include "mimalloc.h"
-#include "mimalloc-internal.h"
-#include "mimalloc-atomic.h"
-#include "../prim.h"
+#include "mimalloc/internal.h"
+#include "mimalloc/atomic.h"
+#include "mimalloc/prim.h"
//---------------------------------------------
// Initialize
diff --git a/src/prim/windows/prim.c b/src/prim/windows/prim.c
index 1e15273a..bea1d437 100644
--- a/src/prim/windows/prim.c
+++ b/src/prim/windows/prim.c
@@ -8,9 +8,9 @@ terms of the MIT license. A copy of the license can be found in the file
// This file is included in `src/prim/prim.c`
#include "mimalloc.h"
-#include "mimalloc-internal.h"
-#include "mimalloc-atomic.h"
-#include "../prim.h"
+#include "mimalloc/internal.h"
+#include "mimalloc/atomic.h"
+#include "mimalloc/prim.h"
#include // strerror
#include // fputs, stderr
@@ -157,6 +157,7 @@ void _mi_prim_mem_init( mi_os_mem_config_t* config )
//---------------------------------------------
int _mi_prim_free(void* addr, size_t size ) {
+ MI_UNUSED(size);
DWORD errcode = 0;
bool err = (VirtualFree(addr, 0, MEM_RELEASE) == 0);
if (err) { errcode = GetLastError(); }
diff --git a/src/random.c b/src/random.c
index 3c8372c8..4fc8b2f8 100644
--- a/src/random.c
+++ b/src/random.c
@@ -5,8 +5,8 @@ terms of the MIT license. A copy of the license can be found in the file
"LICENSE" at the root of this distribution.
-----------------------------------------------------------------------------*/
#include "mimalloc.h"
-#include "mimalloc-internal.h"
-#include "prim/prim.h" // _mi_prim_random_buf
+#include "mimalloc/internal.h"
+#include "mimalloc/prim.h" // _mi_prim_random_buf
#include // memset
/* ----------------------------------------------------------------------------
diff --git a/src/region.c b/src/region.c
index 3571abb6..29681f4c 100644
--- a/src/region.c
+++ b/src/region.c
@@ -32,8 +32,8 @@ Possible issues:
do this better without adding too much complexity?
-----------------------------------------------------------------------------*/
#include "mimalloc.h"
-#include "mimalloc-internal.h"
-#include "mimalloc-atomic.h"
+#include "mimalloc/internal.h"
+#include "mimalloc/atomic.h"
#include // memset
diff --git a/src/segment.c b/src/segment.c
index 78171907..648116c3 100644
--- a/src/segment.c
+++ b/src/segment.c
@@ -5,8 +5,8 @@ terms of the MIT license. A copy of the license can be found in the file
"LICENSE" at the root of this distribution.
-----------------------------------------------------------------------------*/
#include "mimalloc.h"
-#include "mimalloc-internal.h"
-#include "mimalloc-atomic.h"
+#include "mimalloc/internal.h"
+#include "mimalloc/atomic.h"
#include // memset
#include
diff --git a/src/static.c b/src/static.c
index 16799524..a71cddca 100644
--- a/src/static.c
+++ b/src/static.c
@@ -14,17 +14,14 @@ terms of the MIT license. A copy of the license can be found in the file
#endif
#include "mimalloc.h"
-#include "mimalloc-internal.h"
+#include "mimalloc/internal.h"
// For a static override we create a single object file
// containing the whole library. If it is linked first
// it will override all the standard library allocation
// functions (on Unix's).
-#include "alloc.c"
+#include "alloc.c" // includes alloc-override.c
#include "alloc-aligned.c"
-#if MI_OSX_ZONE
-#include "alloc-override-osx.c"
-#endif
#include "alloc-posix.c"
#include "arena.c"
#include "bitmap.c"
@@ -32,9 +29,19 @@ terms of the MIT license. A copy of the license can be found in the file
#include "init.c"
#include "options.c"
#include "os.c"
+<<<<<<< HEAD
#include "page.c"
#include "prim/prim.c"
#include "random.c"
+=======
+#include "page.c" // includes page-queue.c
+#include "random.c"
+#include "region.c"
+>>>>>>> dev-platform
#include "segment.c"
#include "segment-cache.c"
#include "stats.c"
+#include "prim/prim.c"
+#if MI_OSX_ZONE
+#include "prim/osx/alloc-override-zone.c"
+#endif
diff --git a/src/stats.c b/src/stats.c
index 4bc8835c..bbe9121d 100644
--- a/src/stats.c
+++ b/src/stats.c
@@ -5,9 +5,9 @@ terms of the MIT license. A copy of the license can be found in the file
"LICENSE" at the root of this distribution.
-----------------------------------------------------------------------------*/
#include "mimalloc.h"
-#include "mimalloc-internal.h"
-#include "mimalloc-atomic.h"
-#include "prim/prim.h"
+#include "mimalloc/internal.h"
+#include "mimalloc/atomic.h"
+#include "mimalloc/prim.h"
#include // snprintf
#include // memset
diff --git a/test/test-api-fill.c b/test/test-api-fill.c
index 2ad06808..7ba79880 100644
--- a/test/test-api-fill.c
+++ b/test/test-api-fill.c
@@ -5,7 +5,7 @@ terms of the MIT license. A copy of the license can be found in the file
"LICENSE" at the root of this distribution.
-----------------------------------------------------------------------------*/
#include "mimalloc.h"
-#include "mimalloc-types.h"
+#include "mimalloc/types.h"
#include "testhelper.h"
diff --git a/test/test-api.c b/test/test-api.c
index 20050ce8..c78e1972 100644
--- a/test/test-api.c
+++ b/test/test-api.c
@@ -33,8 +33,8 @@ we therefore test the API over various inputs. Please add more tests :-)
#endif
#include "mimalloc.h"
-// #include "mimalloc-internal.h"
-#include "mimalloc-types.h" // for MI_DEBUG and MI_ALIGNMENT_MAX
+// #include "mimalloc/internal.h"
+#include "mimalloc/types.h" // for MI_DEBUG and MI_ALIGNMENT_MAX
#include "testhelper.h"