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
