gc/default/default.c
: don't call malloc_usable_size
when hint is present
#12490
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Depending on the allocator,
malloc_usable_size
may be very cheap or quite expensive. OnmacOS
for instance, it's about as expensive asmalloc
.In many case we call
objspace_malloc_size
with as size we initially requested ashint
. The real usable size may be a few bytes bigger, but since we only use that data to feed GC heuristics, I don't think it's very important to be perfectly accurate.It would make sense to call
malloc_usable_size
after growing a String or Array to use the extra capacity, but here we don't do that, so the call isn't worth its cost.References:
ruby/json
experimental branch profile showing a big overhead frommalloc_size
on macOS: https://share.firefox.dev/40dqHXkmalloc_size
performance: https://lemire.me/blog/2017/09/15/how-fast-are-malloc_size-and-malloc_usable_size-in-c/