Type
unimemfunc
Memory allocation function.
typedef void *(*unimemfunc)(void *user_data, void *ptr, size_t old_size, size_t new_size)Discussion 🔗
Defines the function signature for a custom memory management implementation. The memory manager is responsible for allocating, reallocating, and freeing memory. The implementation must behave like realloc or free depending upon its arguments.
When new_size is non-zero, the allocator must behave like realloc. If ptr is NULL and old_size is zero, the allocator must behave like malloc.
When new_size is zero, the allocator must behave like free. It must also return NULL to the caller.
A minimal implementation of this function might look like the following. Note this example does not utilize the user_data or old_size parameters.
void *custom_allocf(void *ud, void *ptr, size_t osize, size_t nsize) {
if (nsize == 0) {
free(ptr);
return NULL;
} else {
return realloc(ptr, nsize);
}
}
This code assumes that free(NULL) has no effect and that realloc(NULL,size) is equivalent to malloc(size). ANSI C defines both behaviors.