Allocate the memory with the given alignment and size.
On success, it returns a pointer pointing to the required memory address.
On failure, it returns a null pointer.
The client must assure the following things:
Re-allocate the memory at the given address with the given alignment and size.
On success, it returns a pointer pointing to the required memory address.
The memory content within the new_size will remains the same as previous.
On failure, it returns a null pointer. In this situation, the previous memory is not returned to the allocator.
The client must assure the following things: