In malloc-ng, does realloc to a smaller size return a different pointer? (If you want to be pedantic I am asking about returning a pointer with a different representation, provenance is always different but I'm not asking about that .)
Conversation
The question I was really interested in was whether realloc to a smaller size can return NULL, and I thought that the answer to that was so clearly “obviously not” that I didn't dare ask it, but it seems it is a situation that can arise?
3
1
3
Since even munmap can fail, realloc to a smaller size can fail for large allocations in any allocator. It's up to them if they report it, but I expect most report it.
Most modern allocators use slab allocation. If the size class changes, they need to allocate and copy to that.
2
1
Most modern allocators like jemalloc, mimalloc, hardened_malloc and others use slab allocation with a single size class per slab. They're called runs in jemalloc but it's essentially the same concept. I think musl is a bit more flexible to save space but it still largely applies.
Even for a dlmalloc-style allocator with everything mixed together, it still has a distinction between allocations managed via free lists within larger regions and allocations mapped as their own regions. In general, it is always possible for shrink to fail when this happens.
1
I think might be asking "in practice" because a realloc could detect that failure, and just return the original pointer untouched.
1
Show replies


