
Li, Peng wrote:
In GHC, how can I allocate a chunk of memory aligned to some block size (say, 512 or 1024 bytes)? I tried to specify it in the "alignment" method in the Storable typeclass, but that does not seem to work. Is Storable.alignment really used in GHC? If so, is there a code example that allocates aligned memory in this way?
For the moment I am using the C function memalign() like this:
foreign import ccall "static stdlib.h" memalign :: CInt -> CInt -> IO (Ptr CChar) .... do ptr <- memalign alignment size fptr <- newForeignPtr finalizerFree ptr
Is it safe to do so?
Yes, that's safe. Storable.alignment is not used, it is there for informational purposes only - i.e. what alignment does this type need. Foreign.malloc should return memory aligned to the maximum alignment required by any primitive type, and any C structure type (the same as malloc(), in other words). Cheers, Simon