I'm developing a general purpose library which uses Win32's HeapAlloc
MSDN doesn't mention alignment guarantees for Win32's HeapAlloc, but I really need to know what alignment it uses, so I can avoid excessive padding.
On my machine (vista, x86), all allocations are aligned at 8 bytes. Is this true for other platforms as well?
Amd64 heap alignment is documented here:
https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention?view=msvc-160
...stack pointer and malloc or alloca memory, which are 16-byte aligned to aid performance.
Surprisingly, Google turns up evidence that HeapAlloc
is not always SSE-compliant:
HeapAlloc() has all the objects always 8-byte aligned, no matter what their size is (but not 16-byte-aligned, for SSE).
The post is from mid 2008, suggesting that recent Windows XP suffers from this bug.
See also http://support.microsoft.com/kb/286470:
The Windows heap managers (all versions) have always guaranteed that the heap allocations have a start address that is 8-byte aligned (on 64-bit platforms the alignment is 16-bytes).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With