allocaBytes n f executes the computation f, passing as argument
a pointer to a temporarily allocated block of memory of n bytes.
The block of memory is sufficiently aligned for any of the basic
foreign types that fits into a memory block of the allocated size.

The memory is freed when f terminates (either normally or via an
exception), so the pointer passed to f must not be used after this.

Resize a memory area that was allocated with malloc or mallocBytes
to the size needed to store values of type b. The returned pointer
may refer to an entirely different memory area, but will be suitably
aligned to hold values of type b. The contents of the referenced
memory area will be the same as of the original pointer up to the
minimum of the original size and the size of values of type b.

Resize a memory area that was allocated with malloc or mallocBytes
to the given size. The returned pointer may refer to an entirely
different memory area, but will be sufficiently aligned for any of the
basic foreign types that fits into a memory block of the given size.
The contents of the referenced memory area will be the same as of
the original pointer up to the minimum of the original size and the
given size.