The goal of this exercise is to design and
implement an user-level memory management library similar
to LIBC's malloc. Memory is allocated, released and
reallocated by this library.
At initialization, the library must allocate a
specific amount of memory from the operating system
(e.g. brk, which is thereafter used as a buffer to
meet user requests for memory. This buffer must be managed so that
free neighbors blocks are merged together, this reducing external
fragmentation.
The user-level memory manager library must implement, at least, the following interface:
void * alloc(int size)size bytes of memory, returning a pointer to the
allocated area on success and "0" on failure.
void free(void * ptr)alloc.
void * realloc(void * ptr, int new_size)alloc and pointed to by ptr to
new_size bytes. The function returns a pointer to
the reallocated area on success and "0" on failure.
void dump(void)