Am Di., 16. Okt. 2018 um 23:18 Uhr schrieb Simon Marlow <[email protected]
>:

> 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-28400029.1.3),
which in turn has the following guarantee (
https://www.haskell.org/onlinereport/haskell2010/haskellch31.html#x39-28700031.1
):

   "... 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.7),
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.
_______________________________________________
ghc-devs mailing list
[email protected]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Reply via email to