
Am Di., 16. Okt. 2018 um 23:18 Uhr schrieb Simon Marlow : I vaguely recall that this was because 16 byte alignment is the minimum
you need for certain foreign types, and it's what malloc() does. Perhaps
check the FFI spec and the guarantees that mallocForeignPtrBytes and
friends provide? mallocForeignPtrBytes is defined in terms of malloc (
https://www.haskell.org/onlinereport/haskell2010/haskellch29.html#x37-284000...),
which in turn has the following guarantee (
https://www.haskell.org/onlinereport/haskell2010/haskellch31.html#x39-287000...
):
"... All storage allocated by functions that allocate based on a size in
bytes must be sufficiently aligned for any of the basic foreign types that
fits into the newly allocated storage. ..."
The largest basic foreign types are Word64/Double and probably
Ptr/FunPtr/StablePtr (
https://www.haskell.org/onlinereport/haskell2010/haskellch8.html#x15-1700008...),
so per spec you need at least an 8-byte alignement. But in an SSE-world I
would be *very* reluctant to use an alignment less strict than 16 bytes,
otherwise people will probably hate you... :-]
Cheers,
S.