Allocating aligned memory?
Simon Marlow
simonmarhaskell at gmail.com
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).
Cheers,
Simon
More information about the Glasgow-haskell-users
mailing list