std.heap.raw_c_allocator: use malloc_size for resize #19073
Merged
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.
std.heap.c_allocator was already doing this, however, std.heap.raw_c_allocator, which asserts no allocations more than 16 bytes aligned, was not.
The zig compiler uses std.heap.raw_c_allocator, so it is affected by this.
Using this example program:
Before this, you would observe
zig run grow.zig -lc
to print "reallocated" for all iterations. After this change it looks more like this:Since ArrayList already does superlinear growth, I expect this change to be almost meaningless. However it may perform better for small lists, since apparently glibc malloc allocation can grow up to 25 bytes:
On the other hand, looks like musl libc never reports growable memory. 🤷