diff --git a/ide/vs2017/mimalloc-override-test.vcxproj b/ide/vs2017/mimalloc-override-test.vcxproj
index 77752890..7df1e79a 100644
--- a/ide/vs2017/mimalloc-override-test.vcxproj
+++ b/ide/vs2017/mimalloc-override-test.vcxproj
@@ -172,23 +172,14 @@
COPY /Y $(SolutionDir)..\..\bin\mimalloc-redirect.dll $(OutputPath)
-
-
- true
- true
- true
- true
-
-
- false
- false
-
-
{abb5eae7-b3e6-432e-b636-333449892ea7}
+
+
+
diff --git a/ide/vs2017/mimalloc-override-test.vcxproj.filters b/ide/vs2017/mimalloc-override-test.vcxproj.filters
index 80f1c9c0..eb5e70b7 100644
--- a/ide/vs2017/mimalloc-override-test.vcxproj.filters
+++ b/ide/vs2017/mimalloc-override-test.vcxproj.filters
@@ -18,8 +18,5 @@
Source Files
-
- Source Files
-
\ No newline at end of file
diff --git a/ide/vs2017/mimalloc-test.vcxproj b/ide/vs2017/mimalloc-test.vcxproj
index 8e61a97f..c1539aeb 100644
--- a/ide/vs2017/mimalloc-test.vcxproj
+++ b/ide/vs2017/mimalloc-test.vcxproj
@@ -144,14 +144,14 @@
Console
-
-
-
{abb5eae7-b3e6-432e-b636-333449892ea6}
+
+
+
diff --git a/ide/vs2017/mimalloc-test.vcxproj.filters b/ide/vs2017/mimalloc-test.vcxproj.filters
index eb5e70b7..fca75e1c 100644
--- a/ide/vs2017/mimalloc-test.vcxproj.filters
+++ b/ide/vs2017/mimalloc-test.vcxproj.filters
@@ -15,7 +15,7 @@
-
+
Source Files
diff --git a/include/mimalloc-override.h b/include/mimalloc-override.h
index d81063ab..c3348068 100644
--- a/include/mimalloc-override.h
+++ b/include/mimalloc-override.h
@@ -69,11 +69,15 @@ including this header is not necessary.
#define _aligned_offset_recalloc(p,s,n,a,o) mi_recalloc_aligned_at(p,s,n,a,o)
-// ------------------------------------------------------
-// With a C++ compiler we override the new/delete operators.
+// -----------------------------------------------------------------
+// With a C++ compiler we can override all the new/delete operators
+// by defining 'MIMALLOC_DEFINE_NEW_DELETE' in some source file and
+// then including this header file. This is not needed when linking
+// statically with the mimalloc library, but it can be more performant
+// on Windows when using dynamic overiding as well.
// see
-// ------------------------------------------------------
-#ifdef __cplusplus
+// -----------------------------------------------------------------
+#if defined(__cplusplus) && defined(MIMALLOC_DEFINE_NEW_DELETE)
#include
void operator delete(void* p) noexcept { mi_free(p); };
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 42d4a2f4..8a830073 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -24,14 +24,21 @@ target_link_libraries(dynamic-override PUBLIC mimalloc)
add_executable(dynamic-override-cxx main-override.cpp)
target_link_libraries(dynamic-override-cxx PUBLIC mimalloc)
-# with a static library
+# overriding with a static object file works reliable as the symbols in the
+# object file have priority over those in library files
+add_executable(static-override-obj main-override.c ${MIMALLOC_TARGET_DIR}/mimalloc.o)
+target_include_directories(static-override-obj PUBLIC ${MIMALLOC_TARGET_DIR}/include)
+target_link_libraries(static-override-obj PUBLIC pthread)
+
+# overriding with a static library works too if using the `mimalloc-override.h`
+# header to redefine malloc/free.
+add_executable(static-override-static main-override-static.c)
+target_link_libraries(static-override-static PUBLIC mimalloc-static)
+
+
+# overriding with a static library: this may not work if the library is linked too late
add_executable(static-override main-override.c)
target_link_libraries(static-override PUBLIC mimalloc-static)
add_executable(static-override-cxx main-override.cpp)
target_link_libraries(static-override-cxx PUBLIC mimalloc-static)
-
-# and with a static object file
-add_executable(static-override-obj main-override.c ${MIMALLOC_TARGET_DIR}/mimalloc.o)
-target_include_directories(static-override-obj PUBLIC ${MIMALLOC_TARGET_DIR}/include)
-target_link_libraries(static-override-obj PUBLIC pthread)
diff --git a/test/main-override-static.c b/test/main-override-static.c
new file mode 100644
index 00000000..6ddf4f37
--- /dev/null
+++ b/test/main-override-static.c
@@ -0,0 +1,31 @@
+#include
+#include
+#include
+#include
+
+#include
+#include // redefines malloc etc.
+
+int main() {
+ mi_version();
+ void* p1 = malloc(78);
+ void* p2 = malloc(24);
+ free(p1);
+ p1 = malloc(8);
+ //char* s = strdup("hello\n");
+ free(p2);
+ p2 = malloc(16);
+ p1 = realloc(p1, 32);
+ free(p1);
+ free(p2);
+ //free(s);
+ //mi_collect(true);
+
+ /* now test if override worked by allocating/freeing across the api's*/
+ //p1 = mi_malloc(32);
+ //free(p1);
+ //p2 = malloc(32);
+ //mi_free(p2);
+ mi_stats_print(NULL);
+ return 0;
+}
diff --git a/test/main-override.c b/test/main-override.c
index ddb2f16e..1bec1179 100644
--- a/test/main-override.c
+++ b/test/main-override.c
@@ -3,11 +3,10 @@
#include
#include
-//#include
-
+#include
int main() {
- //mi_stats_reset();
+ mi_version(); // ensure mimalloc library is linked
void* p1 = malloc(78);
void* p2 = malloc(24);
free(p1);
@@ -26,6 +25,6 @@ int main() {
//free(p1);
//p2 = malloc(32);
//mi_free(p2);
-
+ mi_stats_print(NULL);
return 0;
}
diff --git a/test/main-override.cpp b/test/main-override.cpp
index 8f47dcd1..fb7ab7a1 100644
--- a/test/main-override.cpp
+++ b/test/main-override.cpp
@@ -4,8 +4,6 @@
#include
#include
-#include
-
#include
static void* p = malloc(8);
@@ -24,16 +22,15 @@ public:
};
-int main() {
- //mi_malloc_override();
- mi_stats_reset();
+int main() {
+ mi_version();
atexit(free_p);
void* p1 = malloc(78);
- void* p2 = _aligned_malloc(24,16);
+ void* p2 = mi_malloc_aligned(16,24);
free(p1);
p1 = malloc(8);
- char* s = _strdup("hello\n");
- _aligned_free(p2);
+ char* s = mi_strdup("hello\n");
+ mi_free(p2);
p2 = malloc(16);
p1 = realloc(p1, 32);
free(p1);