mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-05-05 15:09:31 +03:00
add arena contains check for valid pointers
This commit is contained in:
parent
10a6b303be
commit
2f878354f4
3 changed files with 8 additions and 5 deletions
|
@ -1,5 +1,5 @@
|
||||||
/* ----------------------------------------------------------------------------
|
/* ----------------------------------------------------------------------------
|
||||||
Copyright (c) 2019-2021 Microsoft Research, Daan Leijen
|
Copyright (c) 2019-2023 Microsoft Research, Daan Leijen
|
||||||
This is free software; you can redistribute it and/or modify it under the
|
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
|
terms of the MIT license. A copy of the license can be found in the file
|
||||||
"LICENSE" at the root of this distribution.
|
"LICENSE" at the root of this distribution.
|
||||||
|
|
|
@ -125,7 +125,7 @@ static mi_segment_t* _mi_segment_of(const void* p) {
|
||||||
|
|
||||||
// Is this a valid pointer in our heap?
|
// Is this a valid pointer in our heap?
|
||||||
static bool mi_is_valid_pointer(const void* p) {
|
static bool mi_is_valid_pointer(const void* p) {
|
||||||
return (_mi_segment_of(p) != NULL);
|
return ((_mi_segment_of(p) != NULL) || (_mi_arena_contains(p)));
|
||||||
}
|
}
|
||||||
|
|
||||||
mi_decl_nodiscard mi_decl_export bool mi_is_in_heap_region(const void* p) mi_attr_noexcept {
|
mi_decl_nodiscard mi_decl_export bool mi_is_in_heap_region(const void* p) mi_attr_noexcept {
|
||||||
|
|
|
@ -38,8 +38,8 @@ static int ITER = 50; // N full iterations destructing and re-creating a
|
||||||
|
|
||||||
#define STRESS // undefine for leak test
|
#define STRESS // undefine for leak test
|
||||||
|
|
||||||
static bool allow_large_objects = true; // allow very large objects?
|
static bool allow_large_objects = false; // allow very large objects? (set to `true` if SCALE>100)
|
||||||
static size_t use_one_size = 0; // use single object size of `N * sizeof(uintptr_t)`?
|
static size_t use_one_size = 0; // use single object size of `N * sizeof(uintptr_t)`?
|
||||||
|
|
||||||
|
|
||||||
// #define USE_STD_MALLOC
|
// #define USE_STD_MALLOC
|
||||||
|
@ -244,7 +244,10 @@ int main(int argc, char** argv) {
|
||||||
long n = (strtol(argv[3], &end, 10));
|
long n = (strtol(argv[3], &end, 10));
|
||||||
if (n > 0) ITER = n;
|
if (n > 0) ITER = n;
|
||||||
}
|
}
|
||||||
printf("Using %d threads with a %d%% load-per-thread and %d iterations\n", THREADS, SCALE, ITER);
|
if (SCALE > 100) {
|
||||||
|
allow_large_objects = true;
|
||||||
|
}
|
||||||
|
printf("Using %d threads with a %d%% load-per-thread and %d iterations %s\n", THREADS, SCALE, ITER, (allow_large_objects ? "(allow large objects)" : ""));
|
||||||
//mi_reserve_os_memory(1024*1024*1024ULL, false, true);
|
//mi_reserve_os_memory(1024*1024*1024ULL, false, true);
|
||||||
//int res = mi_reserve_huge_os_pages(4,1);
|
//int res = mi_reserve_huge_os_pages(4,1);
|
||||||
//printf("(reserve huge: %i\n)", res);
|
//printf("(reserve huge: %i\n)", res);
|
||||||
|
|
Loading…
Add table
Reference in a new issue