diff --git a/CMakeLists.txt b/CMakeLists.txt
index e16830aa..202f32f2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -14,6 +14,7 @@ option(MI_OSX_ZONE "Use malloc zone to override standard malloc on macO
option(MI_LOCAL_DYNAMIC_TLS "Use slightly slower, dlopen-compatible TLS mechanism (Unix)" OFF)
option(MI_BUILD_TESTS "Build test executables" ON)
option(MI_CHECK_FULL "Use full internal invariant checking in DEBUG mode (deprecated, use MI_DEBUG_FULL instead)" OFF)
+option(MI_WIN_NUMA "Support NUMA aware allocation on Windows" ON)
include("cmake/mimalloc-config-version.cmake")
@@ -111,6 +112,11 @@ if(MI_USE_CXX MATCHES "ON")
endif()
endif()
+if(MI_WIN_NUMA MATCHES "ON")
+ message(STATUS "Support NUMA aware allocation on Windows (MI_WIN_NUMA=ON)")
+ list(APPEND mi_defines MI_WIN_NUMA)
+endif()
+
# Compiler flags
if(CMAKE_C_COMPILER_ID MATCHES "AppleClang|Clang|GNU")
list(APPEND mi_cflags -Wall -Wextra -Wno-unknown-pragmas -fvisibility=hidden)
diff --git a/ide/vs2017/mimalloc-override.vcxproj b/ide/vs2017/mimalloc-override.vcxproj
index 990d6ca9..268c7091 100644
--- a/ide/vs2017/mimalloc-override.vcxproj
+++ b/ide/vs2017/mimalloc-override.vcxproj
@@ -95,7 +95,7 @@
true
true
../../include
- _CRT_SECURE_NO_WARNINGS;MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);
+ _CRT_SECURE_NO_WARNINGS;MI_WIN_NUMA;MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);
MultiThreadedDebugDLL
false
Default
@@ -123,7 +123,7 @@
true
true
../../include
- _CRT_SECURE_NO_WARNINGS;MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);
+ _CRT_SECURE_NO_WARNINGS;MI_WIN_NUMA;MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);
MultiThreadedDebugDLL
false
Default
@@ -152,7 +152,7 @@
true
true
../../include
- _CRT_SECURE_NO_WARNINGS;MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);NDEBUG
+ _CRT_SECURE_NO_WARNINGS;MI_WIN_NUMA;MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);NDEBUG
AssemblyAndSourceCode
$(IntDir)
false
@@ -184,7 +184,7 @@
true
true
../../include
- _CRT_SECURE_NO_WARNINGS;MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);NDEBUG
+ _CRT_SECURE_NO_WARNINGS;MI_WIN_NUMA;MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);NDEBUG
AssemblyAndSourceCode
$(IntDir)
false
@@ -251,4 +251,4 @@
-
+
\ No newline at end of file
diff --git a/ide/vs2017/mimalloc.vcxproj b/ide/vs2017/mimalloc.vcxproj
index 770a87b2..3a95d9cf 100644
--- a/ide/vs2017/mimalloc.vcxproj
+++ b/ide/vs2017/mimalloc.vcxproj
@@ -109,7 +109,7 @@
true
true
../../include
- _CRT_SECURE_NO_WARNINGS;MI_DEBUG=3;%(PreprocessorDefinitions);
+ _CRT_SECURE_NO_WARNINGS;MI_DEBUG=3;MI_WIN_NUMA;%(PreprocessorDefinitions);
CompileAsCpp
false
stdcpp17
@@ -128,7 +128,7 @@
true
true
../../include
- _CRT_SECURE_NO_WARNINGS;MI_DEBUG=3;%(PreprocessorDefinitions);
+ _CRT_SECURE_NO_WARNINGS;MI_DEBUG=3;MI_WIN_NUMA;%(PreprocessorDefinitions);
CompileAsCpp
false
stdcpp17
@@ -155,7 +155,7 @@
true
true
../../include
- _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions);NDEBUG
+ _CRT_SECURE_NO_WARNINGS;MI_WIN_NUMA;%(PreprocessorDefinitions);NDEBUG
AssemblyAndSourceCode
$(IntDir)
false
@@ -182,7 +182,7 @@
true
true
../../include
- _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions);NDEBUG
+ _CRT_SECURE_NO_WARNINGS;MI_WIN_NUMA;%(PreprocessorDefinitions);NDEBUG
AssemblyAndSourceCode
$(IntDir)
false
@@ -257,4 +257,4 @@
-
+
\ No newline at end of file
diff --git a/ide/vs2019/mimalloc-override.vcxproj b/ide/vs2019/mimalloc-override.vcxproj
index 17b6f4c0..2195663c 100644
--- a/ide/vs2019/mimalloc-override.vcxproj
+++ b/ide/vs2019/mimalloc-override.vcxproj
@@ -95,7 +95,7 @@
true
true
../../include
- MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);
+ MI_WIN_NUMA;MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);
MultiThreadedDebugDLL
false
Default
@@ -123,7 +123,7 @@
true
true
../../include
- MI_DEBUG=3;MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);
+ MI_DEBUG=3;MI_WIN_NUMA;MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);
MultiThreadedDebugDLL
false
Default
@@ -152,7 +152,7 @@
true
true
../../include
- MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);NDEBUG
+ MI_WIN_NUMA;MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);NDEBUG
AssemblyAndSourceCode
$(IntDir)
false
@@ -184,7 +184,7 @@
true
true
../../include
- MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);NDEBUG
+ MI_WIN_NUMA;MI_SHARED_LIB;MI_SHARED_LIB_EXPORT;MI_MALLOC_OVERRIDE;%(PreprocessorDefinitions);NDEBUG
AssemblyAndSourceCode
$(IntDir)
false
diff --git a/ide/vs2019/mimalloc.vcxproj b/ide/vs2019/mimalloc.vcxproj
index e18db0c5..052f4c50 100644
--- a/ide/vs2019/mimalloc.vcxproj
+++ b/ide/vs2019/mimalloc.vcxproj
@@ -97,7 +97,7 @@
true
true
../../include
- MI_DEBUG=3;%(PreprocessorDefinitions);
+ MI_DEBUG=3;MI_WIN_NUMA;%(PreprocessorDefinitions);
CompileAsCpp
false
Default
@@ -116,7 +116,7 @@
true
true
../../include
- MI_DEBUG=3;%(PreprocessorDefinitions);
+ MI_DEBUG=3;MI_WIN_NUMA;%(PreprocessorDefinitions);
CompileAsCpp
false
Default
@@ -143,7 +143,7 @@
true
true
../../include
- %(PreprocessorDefinitions);NDEBUG
+ MI_WIN_NUMA;%(PreprocessorDefinitions);NDEBUG
AssemblyAndSourceCode
$(IntDir)
false
@@ -171,7 +171,7 @@
true
true
../../include
- %(PreprocessorDefinitions);NDEBUG
+ MI_WIN_NUMA;%(PreprocessorDefinitions);NDEBUG
AssemblyAndSourceCode
$(IntDir)
false
diff --git a/src/os.c b/src/os.c
index 0aa85bd6..6b6676f2 100644
--- a/src/os.c
+++ b/src/os.c
@@ -1007,7 +1007,7 @@ void _mi_os_free_huge_pages(void* p, size_t size, mi_stats_t* stats) {
/* ----------------------------------------------------------------------------
Support NUMA aware allocation
-----------------------------------------------------------------------------*/
-#ifdef WIN32
+#if defined(WIN32) && defined(MI_WIN_NUMA)
static size_t mi_os_numa_nodex() {
PROCESSOR_NUMBER pnum;
USHORT numa_node = 0;