Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What alignment does HeapAlloc use

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?

like image 537
Ondergetekende Avatar asked May 10 '10 19:05

Ondergetekende


2 Answers

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.

like image 64
Jay K Avatar answered Oct 01 '22 00:10

Jay K


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).

like image 36
Potatoswatter Avatar answered Sep 30 '22 23:09

Potatoswatter