add noexcept attributes to improve mi_free codegen

This commit is contained in:
Daan 2021-11-04 18:54:57 -07:00
parent 32ee13f41e
commit e853f530a0
3 changed files with 5 additions and 5 deletions

View file

@ -37,9 +37,9 @@ terms of the MIT license. A copy of the license can be found in the file
#endif #endif
#if defined(__cplusplus) #if defined(__cplusplus)
#define mi_decl_externc extern "C" #define mi_decl_externc extern "C"
#else #else
#define mi_decl_externc #define mi_decl_externc
#endif #endif
// "options.c" // "options.c"
@ -100,7 +100,7 @@ void _mi_abandoned_await_readers(void);
// "page.c" // "page.c"
void* _mi_malloc_generic(mi_heap_t* heap, size_t size) mi_attr_noexcept mi_attr_malloc; void* _mi_malloc_generic(mi_heap_t* heap, size_t size) mi_attr_noexcept mi_attr_malloc;
void _mi_page_retire(mi_page_t* page); // free the page if there are no other pages with many free blocks void _mi_page_retire(mi_page_t* page) mi_attr_noexcept; // free the page if there are no other pages with many free blocks
void _mi_page_unfull(mi_page_t* page); void _mi_page_unfull(mi_page_t* page);
void _mi_page_free(mi_page_t* page, mi_page_queue_t* pq, bool force); // free the page void _mi_page_free(mi_page_t* page, mi_page_queue_t* pq, bool force); // free the page
void _mi_page_abandon(mi_page_t* page, mi_page_queue_t* pq); // abandon the page, to be picked up by another thread... void _mi_page_abandon(mi_page_t* page, mi_page_queue_t* pq); // abandon the page, to be picked up by another thread...

View file

@ -435,7 +435,7 @@ mi_block_t* _mi_page_ptr_unalign(const mi_segment_t* segment, const mi_page_t* p
} }
static void mi_decl_noinline mi_free_generic(const mi_segment_t* segment, bool local, void* p) { static void mi_decl_noinline mi_free_generic(const mi_segment_t* segment, bool local, void* p) mi_attr_noexcept {
mi_page_t* const page = _mi_segment_page_of(segment, p); mi_page_t* const page = _mi_segment_page_of(segment, p);
mi_block_t* const block = (mi_page_has_aligned(page) ? _mi_page_ptr_unalign(segment, page, p) : (mi_block_t*)p); mi_block_t* const block = (mi_page_has_aligned(page) ? _mi_page_ptr_unalign(segment, page, p) : (mi_block_t*)p);
mi_stat_free(page, block); mi_stat_free(page, block);

View file

@ -386,7 +386,7 @@ void _mi_page_free(mi_page_t* page, mi_page_queue_t* pq, bool force) {
// Note: called from `mi_free` and benchmarks often // Note: called from `mi_free` and benchmarks often
// trigger this due to freeing everything and then // trigger this due to freeing everything and then
// allocating again so careful when changing this. // allocating again so careful when changing this.
void _mi_page_retire(mi_page_t* page) { void _mi_page_retire(mi_page_t* page) mi_attr_noexcept {
mi_assert_internal(page != NULL); mi_assert_internal(page != NULL);
mi_assert_expensive(_mi_page_is_valid(page)); mi_assert_expensive(_mi_page_is_valid(page));
mi_assert_internal(mi_page_all_free(page)); mi_assert_internal(mi_page_all_free(page));