diff --git a/include/mimalloc/internal.h b/include/mimalloc/internal.h index 8fcaa22e..106da0d1 100644 --- a/include/mimalloc/internal.h +++ b/include/mimalloc/internal.h @@ -77,6 +77,7 @@ bool _mi_getenv(const char* name, char* result, size_t result_size); // "options.c" void _mi_fputs(mi_output_fun* out, void* arg, const char* prefix, const char* message); void _mi_fprintf(mi_output_fun* out, void* arg, const char* fmt, ...); +void _mi_message(const char* fmt, ...); void _mi_warning_message(const char* fmt, ...); void _mi_verbose_message(const char* fmt, ...); void _mi_trace_message(const char* fmt, ...); diff --git a/src/arena.c b/src/arena.c index c2689897..9d40a271 100644 --- a/src/arena.c +++ b/src/arena.c @@ -901,7 +901,7 @@ int mi_reserve_os_memory(size_t size, bool commit, bool allow_large) mi_attr_noe ----------------------------------------------------------- */ static size_t mi_debug_show_bitmap(const char* prefix, const char* header, size_t block_count, mi_bitmap_field_t* fields, size_t field_count ) { - _mi_verbose_message("%s%s:\n", prefix, header); + _mi_message("%s%s:\n", prefix, header); size_t bcount = 0; size_t inuse_count = 0; for (size_t i = 0; i < field_count; i++) { @@ -918,9 +918,9 @@ static size_t mi_debug_show_bitmap(const char* prefix, const char* header, size_ } } buf[MI_BITMAP_FIELD_BITS] = 0; - _mi_verbose_message("%s %s\n", prefix, buf); + _mi_message("%s %s\n", prefix, buf); } - _mi_verbose_message("%s total ('x'): %zu\n", prefix, inuse_count); + _mi_message("%s total ('x'): %zu\n", prefix, inuse_count); return inuse_count; } @@ -933,7 +933,7 @@ void mi_debug_show_arenas(void) mi_attr_noexcept { for (size_t i = 0; i < max_arenas; i++) { mi_arena_t* arena = mi_atomic_load_ptr_relaxed(mi_arena_t, &mi_arenas[i]); if (arena == NULL) break; - _mi_verbose_message("arena %zu: %zu blocks of size %zuMiB (in %zu fields) %s\n", i, arena->block_count, MI_ARENA_BLOCK_SIZE / MI_MiB, arena->field_count, (arena->memid.is_pinned ? ", pinned" : "")); + _mi_message("arena %zu: %zu blocks of size %zuMiB (in %zu fields) %s\n", i, arena->block_count, MI_ARENA_BLOCK_SIZE / MI_MiB, arena->field_count, (arena->memid.is_pinned ? ", pinned" : "")); if (show_inuse) { inuse_total += mi_debug_show_bitmap(" ", "inuse blocks", arena->block_count, arena->blocks_inuse, arena->field_count); } @@ -947,9 +947,9 @@ void mi_debug_show_arenas(void) mi_attr_noexcept { // purge_total += mi_debug_show_bitmap(" ", "purgeable blocks", arena->block_count, arena->blocks_purge, arena->field_count); //} } - if (show_inuse) _mi_verbose_message("total inuse blocks : %zu\n", inuse_total); - //if (show_abandoned) _mi_verbose_message("total abandoned blocks: %zu\n", abandoned_total); - //if (show_purge) _mi_verbose_message("total purgeable blocks: %zu\n", purge_total); + if (show_inuse) _mi_message("total inuse blocks : %zu\n", inuse_total); + //if (show_abandoned) _mi_message("total abandoned blocks: %zu\n", abandoned_total); + //if (show_purge) _mi_message("total purgeable blocks: %zu\n", purge_total); } diff --git a/src/options.c b/src/options.c index c8eb7d20..d4c72a99 100644 --- a/src/options.c +++ b/src/options.c @@ -188,7 +188,7 @@ void _mi_options_init(void) { } } #endif - mi_options_print(); + if (!mi_option_is_enabled(mi_option_verbose)) { mi_options_print(); } } #define mi_stringifyx(str) #str // and stringify @@ -200,7 +200,7 @@ void mi_options_print(void) mi_attr_noexcept const int vermajor = MI_MALLOC_VERSION/100; const int verminor = (MI_MALLOC_VERSION%100)/10; const int verpatch = (MI_MALLOC_VERSION%10); - _mi_verbose_message("v%i.%i.%i%s%s (built on %s, %s)\n", vermajor, verminor, verpatch, + _mi_message("v%i.%i.%i%s%s (built on %s, %s)\n", vermajor, verminor, verpatch, #if defined(MI_CMAKE_BUILD_TYPE) ", " mi_stringify(MI_CMAKE_BUILD_TYPE) #else @@ -219,18 +219,18 @@ void mi_options_print(void) mi_attr_noexcept mi_option_t option = (mi_option_t)i; long l = mi_option_get(option); MI_UNUSED(l); // possibly initialize mi_option_desc_t* desc = &options[option]; - _mi_verbose_message("option '%s': %ld %s\n", desc->name, desc->value, (mi_option_has_size_in_kib(option) ? "KiB" : "")); + _mi_message("option '%s': %ld %s\n", desc->name, desc->value, (mi_option_has_size_in_kib(option) ? "KiB" : "")); } // show build configuration - _mi_verbose_message("debug level : %d\n", MI_DEBUG ); - _mi_verbose_message("secure level: %d\n", MI_SECURE ); - _mi_verbose_message("mem tracking: %s\n", MI_TRACK_TOOL); + _mi_message("debug level : %d\n", MI_DEBUG ); + _mi_message("secure level: %d\n", MI_SECURE ); + _mi_message("mem tracking: %s\n", MI_TRACK_TOOL); #if MI_GUARDED - _mi_verbose_message("guarded build: %s\n", mi_option_get(mi_option_guarded_sample_rate) != 0 ? "enabled" : "disabled"); + _mi_message("guarded build: %s\n", mi_option_get(mi_option_guarded_sample_rate) != 0 ? "enabled" : "disabled"); #endif #if MI_TSAN - _mi_verbose_message("thread santizer enabled\n"); + _mi_message("thread santizer enabled\n"); #endif } @@ -481,6 +481,13 @@ static void mi_vfprintf_thread(mi_output_fun* out, void* arg, const char* prefix } } +void _mi_message(const char* fmt, ...) { + va_list args; + va_start(args, fmt); + mi_vfprintf_thread(NULL, NULL, "mimalloc: ", fmt, args); + va_end(args); +} + void _mi_trace_message(const char* fmt, ...) { if (mi_option_get(mi_option_verbose) <= 1) return; // only with verbose level 2 or higher va_list args;