Allocating aligned memory?

Simon Marlow simonmarhaskell at
Thu Mar 9 08:54:52 EST 2006

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


More information about the Glasgow-haskell-users mailing list