Conversation

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 .)
2
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
3
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.
1
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
Show replies
Replying to and
I wonder how many C developers believe that realloc to a smaller size will never fail. I was one of them this morning. (I do check the result, but it is in preparing the explanation “yeah it's boilerplate but you know…” to go with it that I ended up wondering about it.)
1
3
It can fail even with dlmalloc/glibc if you go from an allocation they manage as a separate region to a smaller size they're willing to manage via free lists within regions. They still essentially have 2 types of size classes and glibc determines the approach dynamically.
1
1
Show replies