Currently the pointers returned by fallback_malloc do not have *ANY* alignment guarantees. This is caused by two different problems is fallback_malloc.ipp.
The first reason is because the heap array used by fallback malloc only has an alignment requirement of '1'. Currently we try and put the first heap_node directly at the start of heap even though 'heap_node' has an alignment requirement of at least 2 bytes. This patch fixes this issue by manually aligning heap using alignas(heap_node).
The second reason is because fallback_malloc returns the pointers that are exactly sizeof(heap_node) bytes after the heap_node header itself. Because heap_nodes only have an alignment requirement of '2' the resulting pointers also only have an alignment requirement of '2' even though an alignment of '16' bytes is required. This patch fixes this problem by
manually requiring that all heap_nodes have an address that is 4 bytes before a 16 byte boundary.
Ick, but I see why this is needed. Might be nice to expand the comment about not being able to include headers with a why.