mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-05-08 00:09:31 +03:00
merge with dev
This commit is contained in:
commit
de00de96fd
3 changed files with 21 additions and 8 deletions
|
@ -166,7 +166,10 @@ endif()
|
||||||
|
|
||||||
# Compiler flags
|
# Compiler flags
|
||||||
if(CMAKE_C_COMPILER_ID MATCHES "AppleClang|Clang|GNU")
|
if(CMAKE_C_COMPILER_ID MATCHES "AppleClang|Clang|GNU")
|
||||||
list(APPEND mi_cflags -Wall -Wextra -Wno-unknown-pragmas -Wstrict-prototypes -fvisibility=hidden)
|
list(APPEND mi_cflags -Wall -Wextra -Wno-unknown-pragmas -fvisibility=hidden)
|
||||||
|
if(NOT MI_USE_CXX)
|
||||||
|
list(APPEND mi_cflags -Wstrict-prototypes)
|
||||||
|
endif()
|
||||||
if(CMAKE_C_COMPILER_ID MATCHES "GNU")
|
if(CMAKE_C_COMPILER_ID MATCHES "GNU")
|
||||||
list(APPEND mi_cflags -Wno-invalid-memory-model)
|
list(APPEND mi_cflags -Wno-invalid-memory-model)
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -189,6 +189,10 @@ static malloc_zone_t* mi_get_default_zone()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(__GNUC__) && !defined(__clang__)
|
||||||
|
#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
|
||||||
|
#endif
|
||||||
|
|
||||||
static malloc_introspection_t mi_introspect = {
|
static malloc_introspection_t mi_introspect = {
|
||||||
.enumerator = &intro_enumerator,
|
.enumerator = &intro_enumerator,
|
||||||
.good_size = &intro_good_size,
|
.good_size = &intro_good_size,
|
||||||
|
@ -199,23 +203,23 @@ static malloc_introspection_t mi_introspect = {
|
||||||
.force_unlock = &intro_force_unlock,
|
.force_unlock = &intro_force_unlock,
|
||||||
#if defined(MAC_OS_X_VERSION_10_6) && \
|
#if defined(MAC_OS_X_VERSION_10_6) && \
|
||||||
MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
|
MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
|
||||||
.zone_locked = &intro_zone_locked,
|
|
||||||
.statistics = &intro_statistics,
|
.statistics = &intro_statistics,
|
||||||
|
.zone_locked = &intro_zone_locked,
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static malloc_zone_t mi_malloc_zone = {
|
static malloc_zone_t mi_malloc_zone = {
|
||||||
.size = &zone_size,
|
.size = &zone_size,
|
||||||
.zone_name = "mimalloc",
|
|
||||||
.introspect = &mi_introspect,
|
|
||||||
.malloc = &zone_malloc,
|
.malloc = &zone_malloc,
|
||||||
.calloc = &zone_calloc,
|
.calloc = &zone_calloc,
|
||||||
.valloc = &zone_valloc,
|
.valloc = &zone_valloc,
|
||||||
.free = &zone_free,
|
.free = &zone_free,
|
||||||
.realloc = &zone_realloc,
|
.realloc = &zone_realloc,
|
||||||
.destroy = &zone_destroy,
|
.destroy = &zone_destroy,
|
||||||
|
.zone_name = "mimalloc",
|
||||||
.batch_malloc = &zone_batch_malloc,
|
.batch_malloc = &zone_batch_malloc,
|
||||||
.batch_free = &zone_batch_free,
|
.batch_free = &zone_batch_free,
|
||||||
|
.introspect = &mi_introspect,
|
||||||
#if defined(MAC_OS_X_VERSION_10_6) && \
|
#if defined(MAC_OS_X_VERSION_10_6) && \
|
||||||
MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
|
MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
|
||||||
// switch to version 9 on OSX 10.6 to support memalign.
|
// switch to version 9 on OSX 10.6 to support memalign.
|
||||||
|
@ -243,16 +247,22 @@ __attribute__((used)) static struct {
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void __attribute__((constructor(0))) _mi_macos_override_malloc() {
|
|
||||||
|
#if defined(__clang__)
|
||||||
|
__attribute__((constructor(0)))
|
||||||
|
#else
|
||||||
|
__attribute__((constructor)) // seems not supported by g++-11 on the M1
|
||||||
|
#endif
|
||||||
|
static void _mi_macos_override_malloc() {
|
||||||
malloc_zone_t* purgeable_zone = NULL;
|
malloc_zone_t* purgeable_zone = NULL;
|
||||||
|
|
||||||
#if defined(MAC_OS_X_VERSION_10_6) && \
|
#if defined(MAC_OS_X_VERSION_10_6) && \
|
||||||
MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
|
MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
|
||||||
// force the purgeable zone to exist to avoid strange bugs
|
// force the purgeable zone to exist to avoid strange bugs
|
||||||
if (malloc_default_purgeable_zone) {
|
if (malloc_default_purgeable_zone) {
|
||||||
purgeable_zone = malloc_default_purgeable_zone();
|
purgeable_zone = malloc_default_purgeable_zone();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Register our zone.
|
// Register our zone.
|
||||||
// thomcc: I think this is still needed to put us in the zone list.
|
// thomcc: I think this is still needed to put us in the zone list.
|
||||||
|
|
|
@ -324,7 +324,7 @@ bool mi_manage_os_memory(void* start, size_t size, bool is_committed, bool is_la
|
||||||
// the bitmaps are already zero initialized due to os_alloc
|
// the bitmaps are already zero initialized due to os_alloc
|
||||||
// initialize committed bitmap?
|
// initialize committed bitmap?
|
||||||
if (arena->blocks_committed != NULL && is_committed) {
|
if (arena->blocks_committed != NULL && is_committed) {
|
||||||
memset(arena->blocks_committed, 0xFF, fields*sizeof(mi_bitmap_field_t));
|
memset((void*)arena->blocks_committed, 0xFF, fields*sizeof(mi_bitmap_field_t)); // cast to void* to avoid atomic warning
|
||||||
}
|
}
|
||||||
// and claim leftover blocks if needed (so we never allocate there)
|
// and claim leftover blocks if needed (so we never allocate there)
|
||||||
ptrdiff_t post = (fields * MI_BITMAP_FIELD_BITS) - bcount;
|
ptrdiff_t post = (fields * MI_BITMAP_FIELD_BITS) - bcount;
|
||||||
|
|
Loading…
Add table
Reference in a new issue