Sometimes, we want to define data structures, whose memory allocation can be parametrized. If we wish to squeeze out the last bit of performance, we tie the structure to a certain allocator in compile time (as we do for hash tables). If performance is not so critical, allocators can be swapped in run time.
This module defines a generic interface to memory allocators. You can use the following pre-defined allocators, or define some of your own.
These data structures accept an allocator (more will come later):
-
Growing arrays
ucw/alloc.h
struct ucw_allocator { void * (*alloc)(struct ucw_allocator *alloc, size_t size); void * (*realloc)(struct ucw_allocator *alloc, void *ptr, size_t old_size, size_t new_size); void (*free)(struct ucw_allocator *alloc, void *ptr); };
This structure describes a generic allocator. It provides pointers to three functions, which handle the actual (re)allocations.
extern struct ucw_allocator ucw_allocator_std;
This allocator uses xmalloc(), xrealloc() and xfree(). The memory it allocates is left unitialized.
extern struct ucw_allocator ucw_allocator_zeroed;
This allocator uses xmalloc(), xrealloc() and xfree(). All memory is zeroed upon allocation.